1.函数返回值
return 后面可以接多个值
return 'abc',[42,'python'],'guido'等价于return ('abc',[42,'python'],'guido')
存储元组的方式:
def bar():
return 'abc',[42,'python'],'guido'
1)aTuple=bar()
2)x,y,z=bar()
3)(a,b,c)=bar()
如果函数没有返回值或者如果显示返回None,函数会返回None
2.内部函数
将一个函数定义在另一个函数内部,这个内部函数的作用域只能在外部函数之内,其他地方都不能调用它。
3.装饰器
装饰器的作用:
1)引入日志
2)增加计时逻辑来检测性能
3)给函数加入事务的能力
@decorator(dec_opt_args)
def func2Bdecorated(func_opt_args):
装饰器的返回值是一个被包装的函数 return wrapped这个是必须的,foo=testFunc(foo)
4.传递函数
将一个函数对象的引用赋给一个新的变量也就是变量也指向这个函数的引用
传递函数并调用函数
5.函数的参数
def func(posargs,defarg1=dval1,defarg2=dval2,....):
posargs是位置参数,必须按照先后顺序传参,defarg1=dval1是默认参数,可传参也可不传
但posargs必须在所有默认参数之前
非关键字可变长参数(元组)
在传递参数的时候可以不用参数名=值的方式进行传递参数,形参直接传递参数值
运行结果:
关键字变量参数(字典)
**the Rest也是可变参数,且传值的时候要使用参数名=参数值的形式传递
6.lambda匿名函数
def true():
return True
等效于:lambda:True
lambda也是函数,可以赋给变量,true=lambda:True,然后通过
------------------------------------------------------------------------------------------
def add(x,y):return x+y
等效于a=lambda x,y:x+y
调用print a(3,4)
7.内建函数
查看内建函数的方式 dir(__builtins__)
filter()
filter(func,seq):将序列中的每一个值传递给func,然后返回结果为true的值的列表
func可以使用lambda代替
map()
map(func,seq):将序列上的每一个元素传递给func,返回返回值的列表
map(lambda x:x+2,[0,1,2,3,4])
map(None,[1,3,5],[2,4,6])使用None的函数对象可以将两个列表两两组合再返回列表,同zip函数
reduce()
reduce((lambda x,y:x+y),range(5))-------(((0+1)+2)+3)+4 将参数传入lambda表达式,然后拿结果跟另一个参数传入表达式
8.全局变量和局部变量
在函数中首先去找局部变量,在局部变量中找不到同名变量后,回去全局变量中找
而在代码块中想修改全局变量的值就要将全局变量声明为global