python之函数
注意项:定义默认参数时,默认参数必须指向不可变对象。
异于其它语言的:函数可以返回多个值。例如:在游戏中位移和坐标;(第一次正式接触函数返回多个值)
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
函数作为返回值:
def lazy_sum(*args):
def sum():
s = 0
for m in args:
s += m
return s
return sum
f = lazy_sum(1, 3, 5, 7)
print(f())#16
print(f)#<function lazy_sum.<locals>.sum at 0x1022a1488>
注意项:1.return sum与sum()函数对齐;2.返回闭包时:返回函数不要引用任何循环变量,或者后续会发生变化的变量。(不可变对象)
在函数lazy_sum中又定义了函数sum,并且在内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。
匿名函数:关键字lambda表示匿名函数,理解:冒号前面的x表示函数参数,冒号后面是返回结果。
- num = list(map(lambda x : x ** 2, range(1, 10)))
2.匿名函数当返回值
def point(x, y):
return lambda : x ** 2 + y ** 2 #闭包
point1 = point(1, 4)
print(point1())
print(point(1, 4))
偏函数:Python的functools模块提供了很多函数有用的功能,方便我们更灵活、方便的使用函数,其中一个就是骗函数。
例如:int() 我们可以把 '1234' 转变成正数,int('1234') = 1234,默认是转变为十进制,int() 还可以设置base参数,我们还可以设置成其它进制,int('1234', base = 8) = 668
我们可以通过functools.partial就是帮助我们创建一个偏函数的,更方便这种操作:
import functools
int2 = functools.partial(int, base=2)//创建偏函数
int2('1000000')//使用偏函数,我们可以更方便的调用函数
64