闭包函数和一些BIF
闭包函数, 在函数内部定义函数.
当然, 要注意的是, 变量的作用域
>>> def Fun1(x):
... def Fun2(Y):
... return x*Y
... return Fun2
...
>>> i = Fun1(2)
>>> i(2)
4
>>> Fun1(2)(3)
6
当变量在错误的作用域中, 就会抛出异常, 使用 nonlocal 可以使局部变量作用域的进行一点修改
>>> def Fun3(x):
... def Fun4(y):
... x *= x;
... return x;
... return Fun4;
...
>>> Fun3(3)(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in Fun4
UnboundLocalError: local variable 'x' referenced before assignment
>>> def Fun3(x):
... def Fun4(y):
... nonlocal x
... x *= x;
... return x;
... return Fun4;
...
>>> Fun3(2)(4)
4
这里都是用了 lambda, 如同 c++中的lambda, 只是少了(){}和 []
即, lambda x : x % 2. 传入x, 当返回 x % 2 为 True的数据
filter : 过滤.
filter(function, A), 将A中的数一个个传入function中, 进入function, 只返回是True的数据, 其余的抛弃掉
>>> lists = filter(lambda x : x % 2, range(1, 10))
>>> lists
<filter object at 0x037AC710>
>>> list(lists)
[1, 3, 5, 7, 9]
map : 改变
>>> maps = map(lambda x : x * 2 + 1, range(1, 10))
>>> list(maps)
[3, 5, 7, 9, 11, 13, 15, 17, 19]
>>>