Python将列表传递给函数并返回main

时间:2015-07-08 09:37:36

标签: python list python-3.x

我从用户那里获取3个值。 Number1,Number2和Power,将Number1和Number2视为列表的范围。然后我试图将数字列表作为参数传递给函数,并将功率值作为另一个参数。使用pow函数使用for循环计算列表中每个数字的幂。我想将结果存储在传递给此函数的相同列表中,并返回到main函数并在那里打印。现在的问题是,我认为我正在尝试错误的方法,因为输出不是预期的。我宣布了另一个列表(结果)并将数字列表中的所有功效结果存储到其中。然后将结果列表分配给数字列表,以便复制其中的所有值。现在,当我返回数字列表并在主函数中打印时,它仍然显示在发送到函数之前在数字列表中的相同值。虽然当我尝试在函数内部打印列表时,它会提供正确的输出。我怎么了,我该怎么纠正呢?

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() 

4 个答案:

答案 0 :(得分:4)

尝试获取返回的对象:

numbers = powerList(numbers, power)

您可以做的另一件事是直接返回函数输出而不将其保存到另一个变量:

return powerList(numbers, power)

答案 1 :(得分:3)

如果您希望函数 mutate 参数列表,请明确地(按惯例)return None执行此操作,例如:

def power_list(numbers, power):  # note PEP-8 naming style
    for index, item in enumerate(numbers):
        numbers[index] = pow(item, power)
    # no explicit return is equivalent to 'return None'

一次取代numbers一个元素的内容,或者:

def power_list(numbers, power):
    numbers[:] = [pow(number, power) for number in numbers]

使用http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html创建新列表,然后使用新值覆盖原始内容。在使用中,使用任一版本:

>>> lst = range(5)
>>> lst
[0, 1, 2, 3, 4]
>>> power_list(lst, 2)
>>> lst
[0, 1, 4, 9, 16]

答案 2 :(得分:2)

您正在返回数字但未获得返回值:
在函数中查看此声明:
numbers = powerList(数字,功率)

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")
   numbers = powerList(numbers, power)
   print(numbers)

main() 

答案 3 :(得分:1)

在Python中,列表是引用,因此,您可以更改函数内的列表内容,并且列表将在主函数中更改:

In [7]: def foo(l):
   ...:     l.append(42)
   ...:     

In [8]: xs = [1, 2, 3]

In [9]: foo(xs)

In [10]: xs
Out[10]: [1, 2, 3, 42]

但是,重新分配列表不会影响主列表:

In [11]: def bar(l):
   ....:     l = [42]
   ....:     

In [12]: bar(xs)

In [13]: xs
Out[13]: [1, 2, 3, 42]

相反,您可以返回新列表:

In [14]: def baz(l):
   ....:     return l + [3.14]
   ....: 

In [15]: baz(xs)
Out[15]: [1, 2, 3, 42, 3.14]

当然,将其分配给另一个变量:

In [16]: new_list = baz(xs)

In [17]: print(new_list)
[1, 2, 3, 42, 3.14]