使用以列表为参数的函数修改全局列表的正确方法是什么?

2024-06-28 19:33:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个函数,它接受一个数字列表,并通过用它们的平方替换数字来修改它。我尝试了4种不同的方法来迭代一个列表,得到了2种不同的结果。下面是代码

nums = [1,2,3]

def square1(nums):
    nums = [i*i for i in nums]

def square2(nums):
    temp = list()
    for i in nums:
        temp.append(i*i)
    nums = temp

def square3(nums):
    for i in range(len(nums)):
        nums[i] = nums[i] * nums[i]

def square4(nums):
    i = 0
    while i < len(nums):
        nums[i] = nums[i] * nums[i]
        i += 1

square1(nums)
print(nums)
# Prints [1, 2, 3]

square2(nums)
print(nums)
# Prints [1, 2, 3]

square3(nums)
print(nums)
# Prints [1, 4, 9]

square4(nums)
print(nums)
# Prints [1, 16, 81]

为什么前两个函数和后两个函数有区别?square1square2函数无法修改全局列表,而square3square4函数可以修改全局列表。这是什么行为


Tags: 函数in列表forlendef数字prints
1条回答
网友
1楼 · 发布于 2024-06-28 19:33:07

传递参数作为对列表的引用 . 在square1中,您正在使用列表理解,它正在为您在函数本地范围上创建列表。把它命名为nums

square2中,您为函数作用域创建了一个空的本地列表,并为其分配了一个名称nos

square3中,这个显式赋值在它指向nums[i] = nums[i] * nums[i]的引用处发生了变化

square4中又有一个赋值。在前两个列表中,您创建的新列表没有改变传递给列表的引用

相关问题 更多 >