2013-01-19 113 views
1

如果我在一個函數中創建一個列表並對其進行編輯,那麼我希望能夠將完成的列表傳遞給另一個函數,以用於做更多的事情。傳遞函數之間的列表Python

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

def func2(): 
    two = numbers[0] 

func1() 

我怎樣才能得到它,以便它不拉動全球定義的錯誤數字。我知道它爲什麼拉錯了,但經過研究,我仍然找不到解決此問題的好方法。

+0

將列表傳遞給func2:'func2(numbers)'。 –

回答

8

根據您的里程和要求,選擇一個

  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() 
    
+0

請輸入密碼?謝謝。關於如何將它們都放到單個類中? – cbbcbail

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