Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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 使用一个函数中的列表,在另一个函数中_Python_Python 2.7 - Fatal编程技术网

Python 使用一个函数中的列表,在另一个函数中

Python 使用一个函数中的列表,在另一个函数中,python,python-2.7,Python,Python 2.7,我是python新手。这可能是一个简单的问题,但如果我有许多相互依赖的函数,我将如何从一个函数访问列表以在另一个函数中使用 所以 这不是确切的代码,但这就是我的问题所在。我只想把它们放在一个函数中,但我需要它们分开。使它们成为参数并返回值: def function_1(): return [] def function_2(list_1): return [2*x for x in list_1] def function_3(list_1, list_2): re

我是python新手。这可能是一个简单的问题,但如果我有许多相互依赖的函数,我将如何从一个函数访问列表以在另一个函数中使用

所以


这不是确切的代码,但这就是我的问题所在。我只想把它们放在一个函数中,但我需要它们分开。

使它们成为参数并返回值:

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

(这表明
功能\u 1
不太值得拥有……

确切的方式取决于您希望事情如何运作,但这里有一个简单的例子:

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

关键的一点是,函数通常不仅仅是“做”事情,它们还返回一些东西。如果一个函数中有一个值要在另一个函数中使用,则第一个函数应返回该值。第二个函数应该调用第一个函数,并使用它的返回值。

函数基本上是黑匣子——外部世界并不真正知道内部发生了什么或存在哪些变量。从外部看,其他代码只看到传入的内容(函数的参数)和传出的内容(返回值)

因此,如果您的函数计算了一些将在其他地方使用的值,那么它应该作为函数的结果返回

例如:

获取一个数字,计算其平方,然后返回它

然后你可以做:

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

正确的方法是使用类。类是一个具有内部变量(在本例中为三个列表)和方法(可以访问内部方法的函数)的对象。因此,这将是:

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]

不能,这些列表是这些函数范围内的局部变量。你可以制作一个模块级列表,你可以将它们声明为
global
s,但我不鼓励这样做。它通常被认为是糟糕的形式,在范围上可能会变得相当混乱
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]