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

cbb*_*ail 1 python list

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

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

def func2():
    two = numbers[0]

func1()
Run Code Online (Sandbox Code Playgroud)

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

Abh*_*jit 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)
    
    Run Code Online (Sandbox Code Playgroud)
  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()
    
    Run Code Online (Sandbox Code Playgroud)
  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])
    
    Run Code Online (Sandbox Code Playgroud)
  4. 用嵌套函数关闭

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


moo*_*eep 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()
Run Code Online (Sandbox Code Playgroud)

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

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

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

func1()
Run Code Online (Sandbox Code Playgroud)