# 函数式编程下
- 函数作为返回值:高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
实例:
# 调用函数return_sum_args
```
def return_sum_args(*args):
def sum_args():
sum = 0
for i in args:
sum += i
return sum
return sum_args
a = return_sum_args(1,2,3,4,5,6) # 返回的是函数 sum
print(type(a))
print(a()) # 等同于调用sum函数
```- 运行结果:
- 注意:每次调用都会返回一个新的函数,即使传入相同的参数:结果也不受影响
- 闭包:注意到返回的函数在其定义内部引用了局部变量args,所以,当一个函数返回了一个函数后,其内部的局部变量还被新函数引用,所以,闭包用起来简单,实现起来可不容易。返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
- 匿名函数:关键字 lambda
- 语法:
lambda 参数:返回值
==lambda x : x * x
- 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
- 匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:
sum_func = lambda x,y : x + y
- 调用:
print(sum_func(1,2))
- 语法:
- 装饰器:在代码运行期间动态增加功能的方式
- 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。
- __name__属性:
函数名.__name__
返回函数名字 - 实例:
# __name__,获取函数名称 def demo(): return '2019.8.27' f = demo print(demo.__name__) print(f.__name__)
- 偏函数:简单总结functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
- 实例:
import functools.partial int2 = functools.partial(int,base=2) # 返回二进制的数据 print(int2('1111')) # 注意到上面的新的int2函数,仅仅是把base参数重新设定默认值为2,但也可以在函数调用时传入其他值:
- 实例: