基本上有三种'函数调用':通过价值
通过引用传递
通过对象引用传递
Python是一种PASS-BY-OBJECT-REFERENCE编程语言。
首先,重要的是要理解一个变量,变量(对象)的值是两个独立的东西。变量'指向'对象。变量不是对象。再次:
变量不是对象
示例:在以下代码行中:>>> x = []
[]是空列表,x是指向空列表的变量,但x本身不是空列表
将变量(x,在上述情况下)视为一个框,将变量([])的“值”视为框内的对象。
通过对象引用(python中的情况):
这里,“对象引用按值传递”。def append_one(li):
li.append(1)x = [0]append_one(x)print x
这里,语句x = [0]产生一个指向对象[0]的变量x(box)
在被调用的函数上,创建了一个新的li。li的内容是SAME作为box x的内容。两个框都包含相同的对象。也就是说,两个变量都指向内存中的同一个对象。因此,li指向的对象的任何更改也将由x指向的对象反映。
总之,上述计划的产出将是:
[0,1]
注意:
如果在函数中重新分配变量li,则li将指向内存中的单独对象。但是,x将继续指向它之前指向的内存中的同一个对象。
例:def append_one(li):
li = [0, 1]x = [0]append_one(x)print x
该计划的输出将是:
[0]
通过参考:
调用函数的框传递给被调用函数。隐含地,框的内容(变量的值)被传递给被调用的函数。因此,对被调用函数中的框内容的任何更改都将反映在调用函数中。
通过价值:
在被调用函数中创建一个新框,并将来自调用函数的框内容的副本存储到新框中。
希望这可以帮助。