我是否正确地将代码从全局变量更改为闭包?非本地请不要。
## Функция с глобальной переменной
def func_g():
global name
name = 'Владимир'
return name
print(func_g())
print(name)
## Функция с замыканием
def func1():
name2 = 'Владимир'
def func2():
return name2
return func2
var = func1('Владимир')
print(var())
print(var.__closure__)
闭包可用于可通过 getter 和 setter 访问的“隐藏”变量,但不能直接访问。该代码与您的代码几乎相同,但有一个重要的例外。该值不应直接存储在变量中,而应存储在容器变量中。例如,在一个只有一个值的列表中。关键是你不能将新对象分配给闭包中的变量。但是您可以从闭包调用对象方法,特别是那些更改对象内容的方法。
该示例使用 python3.12 中的类型注释表示法。对于早期版本,您可以简单地删除所有注释;这不会影响功能。