python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量
python的
nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。
nonlocal是在Python3.0中新增的关键字,python2.x不提供支持
解包参数:
在调用函数时使用*语法
def func(a,b,c,d):
print(a,b,c,d) args = (1,2) + (3,4) if __name__ == '__main__':
func(*args)
这个主要是在2.6中使用apply函数实现,但是在3.0之后就废弃了这个方法,不会调用任何函数
参数类型:
1、关键字参数
2、默认参数
3、任意参数 *,** 不过**必须在*的后面出现
lambda表达式
lambda arg1,arg2,arg3 : expression using arguments
函数式编程工具:
map、filter和reduce
map把每一项传递给函数并收集结果,filter手机那些函数返回一个True值的项,并且reduce通过对一个累加器和后续项应用函数计算一个单个的值,reduce是在Python3.0的functools模块中可用,而不是内置作用域中。
map(function,sequence)
把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的list。
如果function有两个参数,即map(function,sequence1,sequence2)。
例子:
求1*1,2*2,3*3,4*4
map(lambda x:x*x,range(1,5))
返回值是[1,4,9,16]
reduce(function,sequence)
function接收的参数个数只能为2!
先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给
function,然后只返回一个结果。
例子:
求1到10的累加
reduce(lambda x,y:x+y,range(1,11))
返回值是55。
filter(function,sequence)
function的返回值只能是True或False!
把sequence中的值逐个当参数传给function,如果function(x)的返回值是True,就把x加到filter的返回值里面。一般来说filter的返回值是list,特殊情况如sequence是string或tuple,则返回值按照sequence的类型。
例子:
找出1到10之间的奇数
filter(lambda x:x%2!=0,range(1,11))
返回值
[1,3,5,7,9]