我们如何模拟python中的引用传递?

时间:2016-10-18 14:21:59

标签: python pass-by-reference

假设我们有一个函数foo()

def foo():
  foo.a = 2

foo.a = 1
foo()

>> foo.a
>> 2

这是pythonic还是应该将变量包装在可变对象中,例如列表?

例如:

a = [1]

def foo(a):
  a[0] = 2
foo()

>> a

>> 2

2 个答案:

答案 0 :(得分:1)

由于您“想要改变变量以便在全局范围内实现更改”,请使用global关键字告诉您的函数名称a是全局变量。这意味着对函数内a的任何赋值都会影响全局范围。如果您的函数中没有global声明赋值给a,则会创建一个新的局部变量。

>>> a = 0
>>> def foo():
...     global a
...     a = 1
...
>>> foo()
>>> a
1

答案 1 :(得分:0)

使用课程(可能有点矫枉过正):

class Foo:
    def __init__(self):
        self.a = 0

def bar(f):
    f.a = 2

foo = Foo()
foo.a = 1
bar(foo)
print(foo.a)