谁来解惑
def external_function(i, j):k = i - j
def decorator(func):
def wrapper(*arg):
print 'this func is %s'%(func.__name__)
print k * func(*arg)
return wrapper
return decorator
@external_function(10,5)
def my_func(x,y):
return x + y
if __name__ == '__main__':
my_func(10, 2)
哪位大神给讲讲这个装饰器,里面的函数是怎么调用的, my_func(10, 2)怎么调用的external_function( ) 本帖最后由 当回首遇上转身 于 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 )
你这段代码应该还不完整
不然很多地方是会报错的,没有声明,最好是发完整的代码
不然很难分析 我也是初学者 以下是我的看法:
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__) 这一段的第二个引号。 说明语法已经错误。
第一时间没看出来{:10_306:} 。 哎。。
共同努力! 当回首遇上转身 发表于 2017-5-11 21:47
my_func(10, 2)并没有调用external_function( ),而是调用my_func(x,y)返回 10+2 。
中间位置的external_ ...
这就是全部的代码了 yongxi 发表于 2017-5-11 23:54
我也是初学者 以下是我的看法:
print k * func(*arg)
这是我学装饰器的时候看到的代码。。。这就是全部了 sorry没用过装饰器,你可以参考一下这篇文章
http://blog.csdn.net/Sean_ran/article/details/52097997 当回首遇上转身 发表于 2017-5-12 13:43
sorry没用过装饰器,你可以参考一下这篇文章
http://blog.csdn.net/Sean_ran/article/details/52097997
3Q
页:
[1]