如何创建deftime装饰器使函数使用定义时而非调用时的变量?
需求:实现
deftime装饰器,绑定函数定义时的变量环境 核心功能说明
我们需要编写一个名为deftime的装饰器,让被装饰的函数始终使用其定义时存在的变量环境,而非调用时的环境。
示例代码与预期效果
def LouiseTheLow(*ignore, **kw_ignore): print("I am Oldy McMold Face") @deftime def HarriettTheHigh(*ignored_args, **ignored_keywords): LouiseTheLow(59, "some stuff") ################################################################### def LouiseTheLow(*ignore, **kwignore): print("I am The Newest Latest Greatest Thing") ret_val = HarriettTheHigh() # 函数调用
- 期望输出:
"I am Oldy McMold Face" - 无装饰器时的实际输出:
"I am The Newest Latest Greatest Thing"
注意:装饰器需具备通用性,不能仅适配LouiseTheLow这类特定变量名。
关联问题:Lambda函数变量被覆盖场景
除了普通函数的问题,还存在lambda变量被外部覆盖的情况:
def caller(): radius = 10 lamby = lambda height: height*radius**2 ret_val = callee(lamby, 1, 2, 3) return ret_val
问题在于callee函数内部可能定义同名局部变量(比如示例中的radius),导致lambda原本引用的原始变量被覆盖,最终计算结果不符合预期。
内容的提问来源于stack exchange,提问作者Toothpick Anemone
相关产品推荐
相关产品推荐

