慕尼黑的夜晚无繁华
Python 中的变量只是引用对象的名称。在表达式中,名称是实际对象的替代品。Saying 的test(x)意思是“将引用的对象x传入test”。这并不意味着“符号传递x到test”。此外,重新分配名称只会更改该名称所指的对象。它既不影响对象,也不影响它的任何别名。总之,var你在里面修改的名字test根本没有关系x。让函数改变某些东西的首选方法是重新分配结果:x = 2def change(var): return var * 2x = change(x) # x now refers to 4 instead of 2print(x)如果要在函数外更改名称,可以使用nonlocalandglobal关键字:x = 2def change_x(): global x x = x * 2change_x() # x now refers to 4 instead of 2print(x)虽然这可以使一些微不足道的问题变得容易解决,但对于较大的程序来说,这通常是一个坏主意。使用全局变量意味着不能再孤立地使用该函数;结果可能取决于调用此类函数的频率和顺序。如果您有一些自包含的值组和修改它们的方法,则可以使用一个类来描述:class XY: def __init__(self, x, y): self.x, self.y = x, y def swap(self): self.x, self.y = self.y, self.xmy_values = XY(None, 1)print(my_values.x, my_values.y)my_values.swap()print(my_values.x, my_values.y)与global变量相反,您可以根据需要创建尽可能多的类的隔离实例。每个实例都可以单独处理,而不会影响其他实例。您还可以使用可变值使更改对外部可见。不是更改名称,而是修改值。x = [2] # x is a mutable list, containing the value 2 at the momentdef change(var): var[0] = 4 # change leading element of argumentchange(x) # x now contains 4 instead of 2print(x)