我有一個設置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魔法做這個,但簡短的答案是否定的。裝飾者不會改變他們包裹的功能。 –
我不認爲你可以這樣做...... tbh我很難看出你爲什麼要這樣做 –
你似乎是用'set_name'和'print_name'方法定義一個類,而沒有實際聲明一個類。 – chepner