我正在写一个函数,它接受一个数字列表,并通过用它们的平方替换数字来修改它。我尝试了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]
为什么前两个函数和后两个函数有区别?square1
和square2
函数无法修改全局列表,而square3
和square4
函数可以修改全局列表。这是什么行为
传递参数作为对列表的引用 . 在
square1
中,您正在使用列表理解,它正在为您在函数本地范围上创建列表。把它命名为nums
在
square2
中,您为函数作用域创建了一个空的本地列表,并为其分配了一个名称nos
在
square3
中,这个显式赋值在它指向nums[i] = nums[i] * nums[i]
的引用处发生了变化在
square4
中又有一个赋值。在前两个列表中,您创建的新列表没有改变传递给列表的引用相关问题 更多 >
编程相关推荐