python 装饰器取得参数_python装饰器从哪里获得修饰函数的参数

本文深入探讨了Python装饰器的工作原理,通过实例解释了为何在装饰器中必须返回函数以确保正确工作。内容涉及装饰器如何包装原函数,参数传递,以及内部作用域的理解。同时,提到了在定义函数和装饰器时可能出现的错误和解决方案。
摘要由CSDN通过智能技术生成

I understand that calling bar('test1) is basically calling foo(bar('test1'))

不,那是不正确的。在

调用bar('test1')相当于bar = foo(bar)

bar('test1')Why do I have to return test for the decorator to work? returning directly Decorator test: '+bar(some_string) doesn't work as some_string is not defined.

当你这么做的时候

^{pr2}$

Python将其转换为

^{3}$

{/strong>你可以看到一个新的函数。这就是为什么必须从foo返回test才能使bar正常工作。否则,None被分配给bar:>>> def foo(bar):

def test(some_string):

return 'Decorator test: '+bar(some_string)

>>> @foo

def bar(some_string):

return some_string[:3]

>>> bar()

Traceback (most recent call last):

File "", line 1, in

bar()

TypeError: 'NoneType' object is not callableHow does test know about some_string while foo doesn't?

只是因为在到达test之前,some_string是不会被创建的。some_string是test的参数,因此它只存在于test的范围内。否则,不存在名称some_string,因此如果您尝试访问它,将得到一个NameError,包括foo的内部。在

如果要print的值some_string,请在test内执行此操作:def foo(bar):

def test(some_string):

print(some_string)

return 'Decorator test: '+bar(some_string)

return test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值