1

如果我在一个函数中创建一个列表并对其进行编辑,那么我希望能够将完成的列表传递给另一个函数,在那里它将用于做更多的事情。

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

def func2():
    two = numbers[0]

func1()

我怎样才能得到它,这样它就不会拉出未在全局范围内定义的错误号。我知道它为什么会导致错误,但是经过研究,我仍然找不到解决此问题的好方法。

4

2 回答 2

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()
    
于 2013-01-19T19:31:37.557 回答
5

您可以将其作为函数参数传递:

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()
于 2013-01-19T19:30:43.403 回答