爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13878|回复: 0

[求助] Python装饰器问题

[复制链接]

新浪微博达人勋

发表于 2021-1-4 20:27:52 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 雨里1998 于 2021-1-4 20:44 编辑

定义两层装饰器,代码为
  1. def dec1(func):
  2.     print('*****start*****')
  3.     def new_function(*args1,**kwargs1):
  4.         print('running functions1:',func.__name__)
  5.         print('positional arguments1:',args1)
  6.         result1=func(*args1,**kwargs1)
  7.         print('result1:',result1)
  8.         return result1
  9.     print('*****end*****')
  10.     return new_function

  11. def dec2(func):
  12.     print('*****start*****')
  13.     def new_function(*args2,**kwargs2):
  14.         print('running functions2:',func.__name__)
  15.         print('positional arguments2:',args2)
  16.         result2=func(*args2,**kwargs2)
  17.         print('result2:',result2*result2)
  18.         return result2*result2
  19.     print('*****end*****')
  20.     return new_function

  21. if __name__=='__main__':
  22.     @dec2
  23.     @dec1
  24.     def add(a,b):
  25.         return a+b
  26.     print(add(3,5))
复制代码
dec1为输出结果,dec2为输出结果的平方,add为计算输入参数之和。运行结果为
  1. *****start*****
  2. *****end*****
  3. *****start*****
  4. *****end*****
  5. running functions2: new_function
  6. positional arguments2: (3, 5)
  7. running functions1: add
  8. positional arguments1: (3, 5)
  9. result1: 8
  10. result2: 64
  11. 64
复制代码

请问大佬们,为什么dec2中new_function的移动参数也是(3,5),输入它的内包是第一层的new_function,所以移动参数不应该是8吗?



密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表