Ale*_*chi -1 python decorator python-decorators
我有这个代码:
def foo(bar):
def test(some_string):
return 'Decorator test: '+bar(some_string)
return test
def main():
print(bar('test1'))
@foo
def bar(some_string):
return some_string[:3]
Run Code Online (Sandbox Code Playgroud)
我知道调用bar('test1)基本上是调用foo(bar('test1')),但当我尝试在其他函数之前打印some_string时foo,我得到some_string is not defined:
def foo(bar):
print(some_string)
def test(some_string):
return 'Decorator test: '+bar(some_string)
return test
Run Code Online (Sandbox Code Playgroud)
test知道some_string而foo没有?test装饰工作?直接返回Decorator test: '+bar(some_string)不起作用,因为some_string没有定义.我明白打电话
bar('test1)基本上是打电话foo(bar('test1'))
不,不是,你的理解是不正确的.它基本上是在呼唤
foo(bar)('test')
Run Code Online (Sandbox Code Playgroud)
该@foo装饰语法告诉Python来调用foo()传递由命名的函数对象bar(和结果分配回名bar).
该foo()装饰返回了一个新的函数对象:
def test(some_string):
# ...
return test
Run Code Online (Sandbox Code Playgroud)
所以结果foo(bar)是命名的函数对象test(foo()装饰器中的本地名称).foo(bar)('test')如此称呼test('test').
如果要打印传递给的参数test(..),请在该函数内执行此操作:
def foo(bar):
def test(some_string):
print(some_string)
return 'Decorator test: '+bar(some_string)
return test
Run Code Online (Sandbox Code Playgroud)