你不能在Python中通过引用传递一个简单的原语,但是你可以执行以下操作:
def foo(y):
y[0] = y[0]**2
x = [5]
foo(x)
print x[0]
然而,这是一个奇怪的方式。请注意,在Python中,您还可以返回多个值,从而使传递给引用的一些用例不太重要:
def foo(x, y):
return x**2, y**2
a = 1
b = 2
a, b = foo(a, b)
当你返回这样的值时,它们被作为一个元组被返回,它被反包解包。
编辑:
另一种想法的方法是,虽然您不能通过Python引用显式传递变量,但您可以修改传入的对象的属性。在我的示例(和其他人)中,您可以修改列表中的成员然而,您不能完全重新分配传入的变量。例如,看到以下两段代码看起来像他们可能会做类似的事情,但最终得到不同的结果:
def clear_a(x):
x = []
def clear_b(x):
while x: x.pop()
z = [1,2,3]
clear_a(z) # z will not be changed
clear_b(z) # z will be emptied