我想知道是否有python的人可以告诉我以下情况是如何/为什么发生的:
# define a list and send it as an arg to another function
def foo():
nums=[1,2,3]
bar(nums)
print(nums)
# Take the list as an arg and pop the last element off
def bar(numbrs):
numbrs.pop()
# Call the first function
foo()
# The nums local variable has been modified
[1, 2]
作为一个rubyist,我发现foo函数中的一个局部定义变量(nums)可以通过bar函数中执行的一个操作进行更改,这真的很奇怪!这种纠缠正常吗?有名字吗?你知道吗
这两个函数甚至不使用相同的名称来引用列表。这很奇怪。不过我还是挺喜欢的。你知道吗
与Ruby的行为完全相同:
DEMO
不能将局部变量的引用更改为引用其他变量。但是您可以调用就地更改状态的方法。^{} 就是这样的方法之一。(与Ruby中的^{} 相同)
这有点奇怪,我不确定这是否是问题的答案,但如果你运行这个:
输出:
列表是一个对象,调用对象上的方法(如pop())会影响其状态。你知道吗
更准确地说,让我们浏览一下您的代码,看看发生了什么:
好吧,这很清楚。酒吧里发生的事和你有关:
你打电话的时候会发生什么数字流行音乐()? 在list的定义中,您可能会发现一个方法定义:
它通过移除自身对象的一个成员来修改自身对象的状态,并返回移除的成员。你知道吗
在这种情况下,自我是什么?它是一个列表的引用。具体来说,它是在执行pop()操作时被称为numbrs的引用,与创建它时存储为nums的引用相同。你知道吗
我希望这有帮助-这是很多间接的,但如果你遵循周围的参考,你会看到一切如何进行。你知道吗
相关问题 更多 >
编程相关推荐