在一个函数中使用另一个函数的列表 Python
我刚开始学Python。这可能是个简单的问题,但如果我有很多相互依赖的函数,我该如何在一个函数中访问另一个函数的列表呢?
所以……
def function_1():
list_1=[]
def function_2():
list_2= [2*x for x in list_1]
def function_3():
list_3= [x * y for x, y in zip(list_1, list_2)]
这不是我具体的代码,但大概就是我遇到的问题。我本来可以把它们都放在一个函数里,但我需要它们分开。
4 个回答
0
函数就像一个黑盒子——外面的世界并不知道里面发生了什么,也不知道里面有哪些变量。外部的代码只能看到输入的东西(函数的参数)和输出的东西(返回值)。
所以,如果你的函数计算了一个值,并且这个值需要在别的地方使用,那么就应该用 return
把它返回。
比如:
def square(x):
return x * x
这个函数接收一个数字,计算它的平方,然后返回这个结果。
然后你可以这样做:
print(square(5))
这样就会打印出25。
所以在你的情况下,你可以返回列表,并在其他函数中使用它们,就像其他答案所示的那样:
def function_1():
return []
def function_2():
return [2*x for x in function_1()]
def function_3():
return [x * y for x, y in zip(function_1(), function_2())]
0
具体的做法会根据你想要的效果有所不同,但这里有一个简单的例子:
def function_1():
return []
def function_2():
return [2*x for x in function_1()]
def function_3():
return [x * y for x, y in zip(function_1(), function_2())]
关键点是,函数通常不是单纯地“做”事情,而是会返回一些东西。如果你在一个函数里有一个值想在另一个函数中使用,那么第一个函数就应该把这个值返回。第二个函数则需要调用第一个函数,并使用它返回的值。
0
把它们变成参数和返回值:
def function_1():
return []
def function_2(list_1):
return [2*x for x in list_1]
def function_3(list_1, list_2):
return [x * y for x, y in zip(list_1, list_2)]
(这意味着 function_1
可能没什么太大用处……)
1
正确的做法是使用一个类。类就像一个包含内部变量的对象(在你的例子中,就是那三个列表),还有一些方法(可以访问这些内部变量的函数)。所以,代码应该是这样的:
class Foo(object):
def __init__(self, data=None):
self.list_1 = data if not data is None else []
def function_2():
self.list_2 = [2 * x for x in self.list_1]
接下来,调用它的方法是:
foo = Foo() # list_1 is empty
foo2 = Foo([1,2,3]) # list_1 is not empty
foo2.function_2()
print foo2.list_2
# prints [2, 4, 6]