def echo(message):
print(message)
echo('Dircet call')
Direct call
x = echo
x('Indirect call')
Indirect call
def indirect(func, arg):
func(arg)
indirect(echo, 'argument call')
argument call
除了def语句可以生成函数对象外,python中还有一种匿名函数——lambda,它的表达式为:
lambda argument1,argument2,...,argumentN :expression using argument
与def语句不一样,lambda是一个表达式,它返回了一个值(一个新的函数),可以选择性地赋值给一个变量名,而def语句总是得再头部将一个新的函数赋值给一个变量名,而不是将这个函数作为结果返回。
在学习def语句时,了解了关键字参数(name=value)和默认参数
def f(a,b,c):
print(a,b,c)
f(1,2,3)
1 2 3
关键字参数
f(c=3,b=2,a=1)
1 2 3
默认参数例子
def f(a=1, b=2, c=3):
print(a,b,c)
f(2)
2 2 3
f(1,4)
1 4 3
f(2,c=6)
2 2 6 //这是一个关键字和默认参数一起使用的情况,a通过位置得到2,c通过关键字得到6,b通过默认值得到2
注意在python的函数调用中,参数必须一次顺序出现:位置参数(value),关键字参数(name=value)和*sequence形式的组合,最后面跟着**dict形式
在lambda中,默认参数也可以使用,和def中使用方法一样:
x = (lambda a="fee", b="fie", c=“foe”: a+b+c)
x("wee")
'weefiefoe'
来看一些lambda函数的例子:
例1:
L = [lambda x: x ** 2, lambda x: x** 3, lambda x: x ** 4]
for f in L:
print(f(2))
4 8 16
print(L[0](3)
9
例2:
key = 'got'
{'already' : (lambda x: x+2), 'got' :(lambda x: x * 4), 'one' : (lambda x: x ** 6)}[key](2)
8