【发布时间】:2013-11-01 16:59:18
【问题描述】:
我有一个设置name 变量的方法,但它的第一行没有global name,它使用本地name 变量,因此它永远不会更改全局name 变量。
有什么办法可以通过装饰set_name 强制它使用全局name?
name = "John"
def set_name():
name = "Sara"
def print_name():
global name
print(name)
def decorator(func):
def wrapper(*args, **kwargs):
## Problem:
# Force set_name to use global 'name'
func(*args, **kwargs)
return wrapper
print_name()
#Output: John
decorator(set_name)()
print_name()
# Prints John, but I want to prints Sara
【问题讨论】:
-
也许有某种深层次的 Python 魔法可以做到这一点,但简短的回答是否定的。装饰器不会改变它们包装的函数。
-
我不认为你能做到这一点......我很难理解你为什么要这样做
-
您似乎使用
set_name和print_name方法定义了一个类,而没有实际声明一个类。
标签: python global-variables python-decorators