我有一个设置name
变量的方法,但它global name
的第一行没有,它使用局部name
变量,所以它永远不会改变全局name
变量。有没有办法通过装饰set_name
强制它使用 global 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