【发布时间】:2015-07-08 09:37:35
【问题描述】:
我从用户那里获取 3 个值。 Number1、Number2 和 Power,将 Number1 和 Number2 视为列表的范围。然后我试图将数字列表作为参数传递给函数,同时将功率值作为另一个参数。使用 pow 函数使用 for 循环计算列表中每个数字的幂。我想将结果存储在传递给这个函数的同一个列表中,然后返回到主函数并在那里打印。现在的问题是,我假设我尝试了错误的方法,因为输出不符合预期。我声明了另一个列表(结果)并将数字列表中的所有功率结果存储到其中。然后将结果列表分配给数字列表,以便复制其中的所有值。现在,当我返回数字列表并在主函数中打印时,它仍然显示与发送到函数之前数字列表中相同的值。虽然当我尝试在函数内打印列表时,它给出了正确的输出。我哪里错了,我应该如何改正?
def powerList(numbers, power):
print("In the function")
print(numbers)
print("Calculating powers")
result = []
for x in range(len(numbers)):
result.append(pow(numbers[x], power))
numbers = result
return(numbers)
def main():
n1 = int(input("Input number1: "))
n2 = int(input("Input number2: "))
power = int(input("Input power: "))
numbers = [x for x in range(n1,n2+1)]
print(numbers)
print("Passed to the function powerList")
powerList(numbers, power)
print(numbers)
main()
【问题讨论】:
-
您必须意识到
powerList函数中的numbers = result行并不像您想的那样。它替换了 local 变量numbers,但它不影响powerList函数之外的numbers变量。因此,只需按照 Vignesh Kalai 的建议进行操作即可。 -
您要更改原始列表,还是创建一个新列表?
-
原始列表。我跟着 Vignesh Kalai,它似乎奏效了。
-
不,该答案在
powerList中创建一个新列表(最初名为result),返回它并仅将numbers中的名称main重新分配给新列表。这不会改变numbers最初提到的列表;您可以通过添加例如看到这一点print(id(numbers))前后行numbers = powerList(numbers, power)。 -
参见例如docs.python.org/2/library/functions.html#id - 如果两个名称同时给出相同的
id值,则它们指向同一个确切的对象。
标签: python list python-3.x