在Python函数之间传递一个列表

时间:2013-01-19 19:28:39

标签: python list

如果我在一个函数中创建一个列表并进行编辑,那么我希望能够将完成的列表传递给另一个函数,用于执行更多操作。

def func1():
    numbers = [1, 2, 3, 4]
    if numbers.count(1) > 0:
        numbers.remove(1)
        func2()

def func2():
    two = numbers[0]

func1()

我怎么能得到它以便它不会提取未全局定义的错误号。我知道它为什么会拉错误,但经过研究,我仍然找不到解决这个问题的好办法。

2 个答案:

答案 0 :(得分:9)

根据您的里程和要求,选择一个

  1. 将列表作为参数传递给被调用函数

    def func2(numbers):
        two = numbers[0]
    
    
    def func1():
        numbers = [1, 2, 3, 4]
        if numbers.count(1) > 0:
            numbers.remove(1)
            func2(numbers)
    
  2. 使两个函数都成为单个类的一部分,并使列表成为实例属性

    class Foo(object):
        def __init__(self, numbers):
            self.numbers = numbers
            pass
        def func1(self):
            if self.numbers.count(1) > 0:
                self.numbers.remove(1)
                self.func2()
        def func2(self):
            two = self.numbers[0]
    
    
    Foo([1, 2, 3, 4]).func1()
    
  3. 重新设计,以便调用函数使用调用者

    进行修饰
    def func1(func):
        def wraps(*argv):
            numbers = argv[0]
            if numbers.count(1) > 0:
            numbers.remove(1)
            func(*argv)
        return wraps
    
    @func1
    def func2(numbers):
        two = numbers[0]
    
    
    func2([1,2,3,4])
    
  4. 使用嵌套函数关闭

    def func1():
        def func2():
            two = numbers[0]
        numbers = [1, 2, 3, 4]
        if numbers.count(1) > 0:
            numbers.remove(1)
            func2()
    
    
    func1()
    

答案 1 :(得分:5)

您可以将其作为function argument传递:

def func1():
    numbers = [1, 2, 3, 4]
    if numbers.count(1) > 0:
        numbers.remove(1)
        func2(numbers)

def func2(numbers):
    two = numbers[0]

func1()

您还可以定义嵌套在定义列表的范围内的函数:

def func1():
    def func2():
        two = numbers[0]

    numbers = [1, 2, 3, 4]
    if numbers.count(1) > 0:
        numbers.remove(1)
        func2()

func1()