#第五步:带有返回值的装饰器  把第四步复制过来
#用于扩展基本函数的函数
def kuozhan(func):
#内部函数(扩展之后的eat函数)
def neweat():
#以下三步就是扩展之后的功能,于是我们把这三个哥们做成一个函数
#取名叫做neweat
#扩展功能1
print('饭前要洗手')
#调用基本函数
result1 = func()
#扩展功能2
print('饭后溜一圈') #未来的eat函数没有返回值,所以在最后调用的时候返回值为None
#为neweat添加返回值
return result1 #这里需要有返回值才能传给eat
#添加返回值
#return 12 eat原来是函数,eat扩展之后还以函数的形式赋值给eat
#所以return后面必须是扩展之后的函数
#5装饰器用于返回未来的eat函数的return
#5而不是neweat(eat)自带的返回值
#5应该在neweat函数里面再加一个return
return neweat
#基本函数
@kuozhan#eat = kuozhan(eat) #eat就相当于以前的result,用来接收返回值
def eat():
print('吃饭')
return '睡觉'
#扩展之后的函数要重新赋值给基本函数!(但是此步骤还实现不了)
#eat = kuozhan(eat) #eat就相当于以前的result,用来接收返回值
#print(eat)#第四步的目的是为了让打印eat函数的时候打印一个函数
#而不是像第二步和第三步打印回来的是None
#调用函数
result = eat()#eat就是扩展的内部函数neweat函数,就是return返回的值
print('原函数的返回值为',result)

python 装饰器 第五步(2):带有返回值得装饰器的更多相关文章

  1. python 装饰器 第七步:带有参数的装饰器

    #第七步:带有参数的装饰器 #两个基本函数用同一个装饰器装饰 def outer(arg): print(arg) #这是装饰器的代码 def kuozhan(func): print(func) # ...

  2. python 装饰器 第五步(1):带有参数的装饰器

    #第五步:带有参数的装饰器 #用于扩展基本函数的函数 def kuozhan(func): #内部函数(扩展之后的eat函数) #5由于调用的时候传了两个参数,未来的eat函数没有参数接收 #5报错的 ...

  3. python 装饰器 第六步:带有收集参数的函数的装饰器

    #第六步:带有收集参数的函数的装饰器 #装饰器函数 def kuozhan(func): #内部函数(扩展之后的eat函数) def neweat(*w,**n): #以下三步就是扩展之后的功能,于是 ...

  4. python基础之函数进阶之函数作为返回值/装饰器

    因为装饰器需要用到返回函数的知识,所以在这里将返回函数和装饰器合并讲解. 什么是返回函数? 我们知道,一个函数中return可以返回一个或者多个值,但其实,return不仅可以返回值,还可以返回函数. ...

  5. 你必须学写 Python 装饰器的五个理由

    你必须学写Python装饰器的五个理由 ----装饰器能对你所写的代码产生极大的正面作用 作者:Aaron Maxwell,2016年5月5日 Python装饰器是很容易使用的.任何一个会写Pytho ...

  6. python文章装饰器理解12步

    1. 函数 在python中,函数通过def关键字.函数名和可选的参数列表定义.通过return关键字返回值.我们举例来说明如何定义和调用一个简单的函数: def foo(): return 1 fo ...

  7. python之带有参数的装饰器

    一个小demo def set_level(level_num): def set_func(func): def call_func(*args, **kwargs): if level_num = ...

  8. Python 基础之面向对象之八步理解装饰器

    装饰器:在不改变原有代码的情况下,为该原函数扩展新功能特征:返回新函数,替换旧函数语法:@ 语法糖 1.装饰器原型 #例1: def kuozhan(func):    def newfunc():  ...

  9. python入门(十五):装饰器

    1.装饰器(decorator):设计模式 作用:给不同的函数和方法,增加不同的公用的功能. @classmethod,@staticmethod等均是装饰器 定义一个装饰函数,函数必须返回一个闭包函 ...

随机推荐

  1. kmp(最长前缀与后缀)

    http://acm.hdu.edu.cn/showproblem.php?pid=1358 Period Problem Description For each prefix of a given ...

  2. KMP字符串匹配学习

    KMP字符串匹配学习 牛逼啊 SYC大佬的博客

  3. [fw]linux测试工程介绍(Linux Test Project)

    http://ltp.sourceforge.net/ Linux Test Project, 后台很硬,由SGI™ 发起, IBM维护,所以质量有保障. 里面介绍了很多工具,对于一般的基准测试应该是 ...

  4. ECMAScript严格模式

    ECMAScript 第5个版本 1. 严格模式: 什么是: 比普通js运行机制,要求更严格的模式 为什么: js语言本身具有很多广受诟病的缺陷 何时: 今后所有的js程序,必须运行在严格模式下! 如 ...

  5. jsp页面必填项如何加红星号*

    1.加*号 并且设置*号大小 <span style="color:red; font-size: 20px">*</span>

  6. Cheatsheet: 2019 07.01 ~ 09.30

    Other Intro Guide to Dockerfile Best Practices QuickJS Javascript Engine Questions for a new technol ...

  7. Python Web开发:使用Django框架创建HolleWorld项目

    开发环境搭建 Python环境安装 下载地址:https://www.python.org/downloads// Django安装 打开Windows CMD输入pip install django ...

  8. python常用魔法函数

    1.__init__(): 所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对 ...

  9. openstack组件之nova

    Nova常用命令  1.查看vm列表 nova listnova list --all 2.查看镜像列表  nova image-list   3.查看卷列表 nova voluma-list 4.查 ...

  10. IT路上可能遇到的小需求资源汇总

    jar文件打包为window service tomcat打包为window service springboot的jar包打包为window service