Python6
lambda函数
在Python里面有两种函数:
用def关键词的正规函数
用lambda关键词的匿名函数
匿名函数:
所谓匿名,即不再使用delf语句定义一个函数
Python使用lambda来创建匿名函数
lambda只是一个表达式,函数体比def简单得多
lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里面的参数
lambda函数没有所谓的函数名,这也是它为什么叫匿名函数
lambda定义匿名函数的关键词
argument_list-函数参数,他们可以是位置参数。默认参数。关键词参数,和正规函数里的参数类型一样。
:-冒号,在函数参数和表达式中间加个冒号
expression-函数表达式,输入函数参数,输出一些值
sumary=lambda arg1,arg2:arg1+arg2
>>> print(sumary(10,20))
30
func=lambda*args:sum(args)
>>> print(func(1,2,3,4,5))
15
匿名函数VS正规函数:
lbd_aqr=lambda x:x**2
print(lbd_aqr)
<function at 0x033E1A50>
lbd_aqr=lambda x:x**2
print(lbd_aqr)
<function at 0x033E1A50>def aqr(x):
return x**2
print(sqr(9))
Traceback (most recent call last):
File “<pyshell#16>”, line 1, in
print(sqr(9))
NameError: name ‘sqr’ is not defined
(错的)
Lambdab表达式的应用
高阶函数(high-order function)在函数化编程(function programming)很常见,主要有两种形式:
参数是函数(filter,map)
返回值是函数(closure)
下面,看看map,filter的语法:
filter(function, iterable) 过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。
odd=lambda x: x% 2==1
templist=filter(odd,[1,2,3,4,5])
print(list(templist))
[1, 3, 5]
map(function, iterable, …) 根据提供的函数对指定序列做映射。
m1=map(lambda x:x**2,[1,2,3,4,5])
print(list(m1))
[1, 4, 9, 16, 25]
除了 Python 这些内置函数,我们也可以自己定义高阶函数,如下:
```python
def apply_to_list(fun,some_list):
return fun(some_list)