Python内置了很多有用的函数,我们可以直接调用。
要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。
也可以在交互式命令行通过help(abs)查看abs函数的帮助信息。
help(abs)
abs(-10)
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
下面我们定义一个求两数之和的函数:
def add_two(a, b):
return a + b
add_two(10, 22)
请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。
return None可以简写为return。
# 求x的平方
def power(x):
return x * x
power(5)
# 求x的n次幂,设置n的默认值为2。
def power(x, n=2):
return x ** n
power(5, 3)
设置默认参数时,有几点要注意:
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
使用默认参数有什么好处?最大的好处是能降低调用函数的难度。
在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
我们以数学题为例子,给定一组数字$a,b,c……$,请计算$a+b+c....$
要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把a,b,c……作为一个 list 或 tuple 传进来,这样,函数可以定义如下:
def calc(numbers):
amount = 0
for num in numbers:
amount += num
return amount
numbers = [100, 200, 3, 4]
calc(numbers)
如果利用可变参数,我们把函数的参数改为可变参数:
def calc(*numbers):
amount = 0
for num in numbers:
amount += num
return amount
calc(1,2,3,4,5,7)
可变参数允许你传入 0 个或任意个参数,这些可变参数在函数调用时自动组装为一个 tuple。而关键字参数允许你传入 0 个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个 dict。
def get_kwargs(**kwargs):
print(kwargs)
get_kwargs(a=10, b="hello", c=['a', 1, 'bcd'])
在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。
def func(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
func(10, 20, 30, 'd', 'e', 'f', x=99, y ='hello')
python 使用 lambda 来创建匿名函数。
lambda只是一个表达式,函数体比def简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
# 定义lambda函数
f = lambda x: x*x
[f(i) for i in range(10)]