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 に答える