一个函数名称作为另一个函数的参数
Python内建高阶函数
- map函数
- map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
- reduce函数
闭包
闭包 = 函数 + 环境变量
函数以及在定义函数时的函数外部环境变量,组成的一个闭包,组成闭包后,闭包中外部环境变量之后不会受影响
闭包中的外部环境变量不能是全局变量
闭包中的外部环境变量存储在f1.__closure__中
闭包保存的是函数定义时的环境,把函数定义时的现场保存下来
装饰器
在代码运行期间动态增加功能的方式,成为装饰器
*args, **kw 可以兼容传递的任意参数
带参数的装饰器,相当于在普通装饰器外面再包裹一层函数,接收装饰器参数
from datetime import datetime
# 不带参数的装饰器
def print_log(func):
def wrapper(*args, **kw):
print('log......')
func(*args, **kw)
return wrapper
# 带参数的装饰器
def print_func_time(text):
def print_time(func):
def wrapper(*args, **kw):
print(text + ':' + str(datetime.now()))
func(*args, **kw)
return wrapper
return print_time
@print_log
@print_func_time('第一个方法')
def test():
print('my test')
@print_log
@print_func_time('第二个方法')
def test2(**kw):
print(kw)
test()
test2(age=30)
打印结果:
log......
第一个方法:2018-09-07 10:59:15.633597
my test
log......
第二个方法:2018-09-07 10:59:15.633647
{'age': 30}
偏函数
当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单。
可以定义一个函数,参数传入默认值,可以实现,使用偏函数,省去了再创建一个函数的麻烦
base为默认值
def int2(x, base=2):
return int(x, base)
使用偏函数:
import functools
int2 = functools.partial(int, base=2)
int2('1000000')
functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单