鱼C论坛

 找回密码
 立即注册
查看: 5793|回复: 6

谁来解惑

[复制链接]
发表于 2017-5-11 15:16:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. def external_function(i, j):
  2.     k = i - j
  3.     def decorator(func):
  4.         def wrapper(*arg):
  5.             print 'this func is %s'%(func.__name__)
  6.             print k * func(*arg)
  7.         return wrapper
  8.     return decorator

  9. @external_function(10,5)
  10. def my_func(x,y):
  11.     return x + y

  12. if __name__ == '__main__':
  13.     my_func(10, 2)
复制代码


哪位大神给讲讲这个装饰器,里面的函数是怎么调用的, my_func(10, 2)怎么调用的external_function( )
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-5-11 21:47:14 | 显示全部楼层
本帖最后由 当回首遇上转身 于 2017-5-11 21:50 编辑

my_func(10, 2)并没有调用external_function( ),而是调用my_func(x,y)返回 10+2
中间位置的external_function(10,5)为什么前面会有@?
external_function(10,5)本来是调用external_function(i,j )
你这段代码应该还不完整
不然很多地方是会报错的,没有声明,最好是发完整的代码
不然很难分析
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-11 23:54:43 | 显示全部楼层
我也是初学者 以下是我的看法:

            print k * func(*arg)
这一段应该就报错了。
首先 K是上层函数定义过 K = i - j , 这内嵌函数里面 如果不加 nonlocal k 指明 k 不是一个局部变量, 那么程序报错 说不知道k是什么。 除非这样 程序认为是一个字符串‘k’
其次,func(*arg)也不对。   func(*arg) 语法是一个函数? 但是 你提供的代码里面并没有 func的定义过程,只是在def decorator(func): 被定义为一个变量。 但是妇因为内嵌函数的关系,所以func在def wrapper(*arg):这一层内嵌函数里面是没有被定义过的 。
@external_function(10,5)  调用函数为何要加一个@? 这个我也没看懂
所以,经过我有限的知识 分析,你这一段代码应该是错的。

经过运行, python第一时间就报错了。 报错位置是print 'this func is %s'%(func.__name__) 这一段的第二个引号。 说明语法已经错误。

第一时间没看出来   。 哎。。
共同努力!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-12 13:35:09 | 显示全部楼层
当回首遇上转身 发表于 2017-5-11 21:47
my_func(10, 2)并没有调用external_function( ),而是调用my_func(x,y)返回 10+2 。
中间位置的external_ ...

这就是全部的代码了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-12 13:36:38 | 显示全部楼层
yongxi 发表于 2017-5-11 23:54
我也是初学者 以下是我的看法:

            print k * func(*arg)

这是我学装饰器的时候看到的代码。。。这就是全部了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-12 13:43:25 | 显示全部楼层
sorry没用过装饰器,你可以参考一下这篇文章
http://blog.csdn.net/Sean_ran/article/details/52097997
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-12 16:24:01 | 显示全部楼层
当回首遇上转身 发表于 2017-5-12 13:43
sorry没用过装饰器,你可以参考一下这篇文章
http://blog.csdn.net/Sean_ran/article/details/52097997

3Q
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-14 23:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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