Python 的函数在形式上分为三种,一种是 Python 内置的函数, 一种是第三方库的函数,一种是我们自己定义的函数,但无论哪种形式, 函数定义方式都是一样的。
函数定义后,我们就可以通过函数名和参数来调用函数,本节我们就来学习如何定义函数和使用函数。
Python 内置了很多函数,我们可以直接调用,要调用一个函数, 需要知道函数的名称和参数的个数,比如求绝对值的函数,函数名称为 abs,参数个数只有一个。
print(abs(-8))
想了解 python 内置函数的定义,我们可以直接从 python 的官方网站查看文档(https://docs.python.org/2/library/functions.html), 我们也可以在交互式命令行通过 help(函数名称) 查看该函数的帮助信息。
C:\Users\fengfeng000123>python >>> help(abs) Help on built-in function abs in module __buil abs(...) abs(number) -> number Return the absolute value of the argument.
Python 解释器内不可能内置过多的函数,但也有些比较实用的函数会经常用到,有些好心的程序员写好的一些库, 经过官方评审后,加入了 Python 安装包内,在我们安装 Python 的时候就会把它们放在一些目录下, 调用的时候只需要 import 库名 就可以了,当然也有一些程序员写的库没有加入到 Python 安装包内,我们只需要把它们下载下来即可使用。
import time time.sleep(3) print("三秒后我才出来")
在项目开发中我们需要自己定义函数来实现项目的需求,在 Python 中,我们定义一个函数要使用 def 语句,依次写出函数名,括号,括号中的参数和冒号, 然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
def myabs(data): return data if data >= 0 else -data # 暂不考虑用户如果输入非数字类型数据 print(myabs(-9))
在 python 中,我们定义一个函数,但是还没想好怎么写函数的代码,可以用 pass 语句,这种函数就是空函数,pass 语句什么都不做,实际上 pass 可以用来作为占位符。
def myfunc(): pass
调用函数时,如果参数个数不对,Python 解释器会自动检查出来,并抛出 TypeError。
def beauty(age): if age < 20: return "beauty" return "augly" beauty() # 参数个数不对
由于 Python 是弱类型语言,如果调用者传入的参数类型不符合我们要求,Python 解释器就无法帮我们检查, 我们可以用 Python 内置的数据类型检查函数 isinstance 来从逻辑上检查参数类型是否匹配,isinstance 函数可以判断某个对象是属于某种类型或者某些类型中的一种(用 tuple),是的话返回 True,否则返回 False。
def myabs(data): if isinstance(data, (int, float)): return data if data >= 0 else -data return "参数类型不对" print(myabs("hello"))
我们虽然可以用 isinstance 函数来检查数据类型,但是我们想在用户给的参数不符合我们的要求时, 最好抛出异常终止程序执行,而不是给用户返回一个提醒。
def mysquare(data): try: rst = data * data except: raise TypeError("类型错误,请输入数字类型") return rst print(mysquare("hello"))
其它语言一般只能返回一个值,而 Python 和大多数其它语言不同,可以返回多个返回值,当 Python 返回多个值的时候,python 解释器把这些值放进一个 tuple 里面,所以 Python 的函数返回多值其实就是返回一个 tuple,该 tuple 本质上也是一个值。
def myfunc(): return "ruhua", "xingxing", "zhaoritian" rst = myfunc() print(rst) # 可以看到是一个 tuple print(type(rst)) # tuple 类型
当 python 返回多个值的时候,接收变量个数只能为一个或返回值的个数, 因为一个变量接收的是整个 tuple,而多个变量接收的是 tuple 里面成员的个数。
def myfunc(): return "ruhua", "xingxing", "zhaoritian" rst = myfunc() # ok one, two, three = myfunc() # ok one, two = myfunc() # 错误
函数体内部的语句在执行时,一旦执行到 return 时,函数就执行完毕,并将结果返回, 如果没有 return 语句,函数执行完毕后也会返回结果,只是结果为 None。
def myfunc(): name = "myfunc" print(myfunc())
会写自定义函数。
了解函数的参数。
弄明白 python 返回值的本质。
著名公司(某多多)对于以下代码,运行一下看下结果,想想为什么?
def myabs(data): try: return data if data >= 0 else -data except: raise TypeError("类型错误,请输入数字类型") print(myabs(True)) # ok print(myabs(None)) # 异常 print(myabs("hello")) # 异常 print(myabs([-1, -2])) # 异常 print(myabs((-2, -3))) # 异常 print(myabs({"a": "hello"})) # 异常 print(myabs(set([-1, -2]))) # 异常
python 中只有数字类型或bool类型才能和数字类型比较