Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将列表传递到函数中并返回到main_Python_List_Python 3.x - Fatal编程技术网

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

Python将列表传递到函数中并返回到main,python,list,python-3.x,Python,List,Python 3.x,我从用户那里获取了3个值。Number1、Number2和Power,将Number1和Number2视为列表的一个范围。然后我尝试将数字列表作为一个参数传递到函数中,同时将幂值作为另一个参数。使用pow函数,使用for循环计算列表中每个数字的幂。我想将结果存储在传递到此函数的相同列表中,然后返回到主函数并在那里打印。现在的问题是,我假设我尝试了错误的方法,因为输出不是预期的。我声明了另一个列表结果,并将数字列表中的所有power结果存储到其中。然后将结果列表命名为数字列表,以便复制其中的所有值

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

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

尝试获取返回的对象:

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

return powerList(numbers, power)
In [16]: new_list = baz(xs)

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

在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]
当然,还要将其分配给另一个变量:

return powerList(numbers, power)
In [16]: new_list = baz(xs)

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

您正在返回数字,但未获得返回值: 在功能中勾选此语句: 数字=功率列表数字,功率


如果希望函数改变参数列表,请显式执行,并按约定返回None,例如:

一次替换一个元素的数字内容,或:

def power_list(numbers, power):
    numbers[:] = [pow(number, power) for number in numbers]
它使用创建一个新列表,然后用新值覆盖原始列表的内容。在使用中,对于以下任一版本:

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

您必须意识到,powerList函数中的numbers=result行并不是您所想的那样。它替换局部变量number,但不影响powerList函数之外的变量number。所以,只要按照Vignesh Kalai的建议去做就行了。你想更改原始列表还是创建一个新列表?原始列表。我遵循了Vignesh Kalai的方法,它似乎起了作用。不,这个答案在powerList中创建了一个新的列表,最初命名为result,然后返回它,只将main中的名称编号重新分配给新列表。这不会改变数字最初所指的列表;您可以通过在行号=powerListnumbers,power之前和之后添加例如printidnumbers来看到这一点。请参见例如-如果两个名称同时给出相同的id值,则它们指向相同的确切对象。谢谢。它工作正常,技术上是一个更好的答案。