函数
8.1 定义函数
#函数定义
def my_abs(x):
if x>=0:
return x
else:
return -x;
#函数调用
print(my_abs(-1))
#空函数
def nop():
passpass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
pass还可以用在其他语句里,比如:
if age >= 18:
pass函数返回多个值
在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的新的坐标:
原来返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
2.函数的参数
2.1.默认参数
默认参数默认值为变量
默认值为表达式?
2.2.可变参数
可变参数定义
如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做
这种写法当然是可行的,问题是太繁琐,所以Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:
2.3.关键字参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
2.4.参数组合
3.高阶函数
变量指向函数
函数名其实就是指向函数的变量!对于abs()这个函数,完全可以把函数名abs看成变量,它指向一个可以计算绝对值的函数!
函数本身也可以赋值给变量,即:变量可以指向函数。
传入函数
既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
3.1.map和reduce函数
map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
例子
reduce和map综合使用
3.2.fliter函数
和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
3.3.sorted函数
3.4.返回函数
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
3.5.匿名函数
当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
关键字lambda表示匿名函数,冒号前面的x表示函数参数。
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
3.6.装饰器
代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)
Last updated
Was this helpful?