Python笔记7(高阶函数、装饰器、偏函数)

一个函数名称作为另一个函数的参数

Python内建高阶函数
  • map函数
  1. 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的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容