python学习--嵌套示例、装饰器

一 嵌套函数示例

1.def p_deco(func):
2.    def wrapper(name):
3.        return "<p>{0}</p>".format(func(name))
4.    return wrapper
5.
6.def book(name):
7.    return "the name of my book is {0}".format(name)
8.
9.  laoqi = p_deco(book)
10. py_book = laoqi("Python大学实用教程")
11.
12. print(py_book)

代码单步调试执行过程
9—>2—>4—>9—>10—>3—>7—>3—>10—>12
9—>2—>4—>9:函数调用p_deco(),返回wrapper(book)
9—>10–>3:左边=wrapper(book(“Python大学实用教程”)),调用wrapper()
3–>7–>3:返回内层book("“Python大学实用教程”)调用结果
3–>10:返回wrapper()函数调用结果
10–>12:输出打印、输出结果。在这里插入图片描述
二 装饰器

def p_deco(func):
    def wrapper(name):
        return "<p>{0}</p>".format(func(name))
    return wrapper

@p_deco
def book(name):
    return "the name of my book is {0}".format(name)
    
# laoqi = p_deco(book)
# py_book = laoqi("Python大学实用教程")

py_book = book("Python大学实用教程")
print(py_book)

输出结果同一中一样。
@p_deco成为装饰器语法糖。实现p标签包裹的功能。
装饰器工作原理:
假设用 funA() 函数装饰器去装饰 funB() 函数。

#funA 作为装饰器函数
def funA(fn):
    #...
    fn() # 执行传入的fn参数
    #...
    return '...'

@funA
def funB():
    #...

实际上,上面程序完全等价于下面的程序:

def funA(fn):
    #...
    fn() # 执行传入的fn参数
    #...
    return '...'

def funB():
    #...

funB = funA(funB)

通过比对以上 2 段程序不难发现,使用函数装饰器 A() 去装饰另一个函数 B(),其底层执行了如下 2 步操作:
将 B 作为参数传给 A() 函数;
将 A() 函数执行完成的返回值反馈回 B。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值