Python functools

Posted on 2018-12-29 17:07  缥缈映苍穹  阅读(126)  评论(0)    收藏  举报
# 回忆装饰器

from functools import wraps # 可以改变一个函数的名字, 注释...

def wrapper(fn):
    @wraps(fn)  # 把inner的名字改变成原来的func
    def inner(*args, **kwargs):
        print("前")
        ret = fn(*args, **kwargs)
        print("后")
        return ret

    return inner

@wrapper # func = wrapper(func)
def func():
    print('哈哈哈')
#
print(func.__name__) # func



# map 映射 reduce 归纳
print(list(map(lambda x: x**2, [i for i in range(10)])))

from functools import reduce
#
def func(a, b):
    return a + b # 0+1 +4 +7+2+5+8+3+6+9 # 累加
#
# # 会把我们每一个数据交给func去执行, 把默认值作为第一个参数传递给函数
# # 第二个参数就是你这个序列中的第一个数据
# # 接下来. 把刚才返回的结果作为第一个参数传递个a
# # 继续吧刚才的结果给第一个参数. 把第三个数据传递给b
ret = reduce(func, [1,4,7,2,5,8,3,6,9])
# # 工作流程
func(func(func(0, 1),4),7)
print(ret)
print(reduce(lambda x, y:x + y, [i for i in range(101)]))


from functools import partial

def chi(zhushi, fushi):
    print(zhushi, fushi)

# 固定函数中某些参数的值
chi2 = partial(chi, fushi="辣鸡爪")
chi2("大米饭")
chi2("小米饭")
chi2("黑米饭")
chi2("黄米饭")
chi2("紫米饭")
chi2("糯米饭")