标签:基础 python 一个 动态 函数返回 元组 需要 代理 class
def zaoren():
#
# print("浇水") # 此需求有的时候需要. 有的时候不需要
print("捏个泥人")
print("吹口仙气")
print("你就出来了")
#
#
zaoren()
zaoren()
zaoren()
#
# # 三年大旱. 没有水
#
#
def water():
print("浇水")
zaoren()
#
# # 此时的设计就不符合开闭原则
zaoren()
water()
water()
water()
water()
water()
water()
water()
# 装饰器
def wrapper(fn): # fn接收的是一个函数
def inner():
print("浇水")
fn() # 调用你传递进来的函数
print("睡一觉")
return inner
def zaoren():
print("捏个泥人")
print("吹口仙气")
print("你就出来了")
zaoren = wrapper(zaoren)
zaoren()
zaoren()
def play(username, password):
print("双击lol")
print("登录", username, password)
print("选择狂战士")
print("进草丛")
print("崩山击, 十字斩")
#
#
#
#
# #
def xiaoxiaole(qq):
print("登录qq账号")
print("消消乐")
# #
# # # 开挂
# # # 关闭外挂
# # # 在目标函数前和后插入一段新的代码. 不改变原来的代码
def wrapper(fn): # fn = play
def inner(*args, **kwargs): # 无敌传参 接受到的是元组 ("alex", 123)
print("开挂")
ret = fn(*args, **kwargs) # 接受到的所有参数. 打散传递给正常的参数
print("关闭外挂")
return "月之光芒"
return inner
# #
play = wrapper(play) # play = inner
# ret = play(‘alex‘,"123")
# print(ret) # None
#
ret = play(111,222)
print(ret)
# 通用装饰器写法:
# python里面的动态代理.
# 存在的意义: 在不破坏原有函数和原有函数调用的基础上. 给函数添加新的功能
def wrapper(fn): # fn是目标函数.
def inner(*args, **kwargs): # 为了目标函数的传参
‘‘‘在执行目标函数之前.....‘‘‘
ret = fn(*args, **kwargs) # 调用目标函数, ret是目标函数的返回值
‘‘‘在执行目标函数之后....‘‘‘
return ret # 把目标函数返回值返回. 保证函数正常的结束
return inner
@wrapper # target_func = wrapper(target_func)
def target_func():
pass
# target_func = wrapper(target_func) # 此时fn就是target_func
target_func() # 此时执行的是inner
标签:基础 python 一个 动态 函数返回 元组 需要 代理 class
原文地址:https://www.cnblogs.com/demons97/p/10121670.html