2014-02-27 18 views
0

我有一個非常大的功能,我正在打入更小的功能。它目前看起來像:如何迭代Django中的一系列函數?

def big_function(): 
    # process1 
    # process2 
    # process3 
    # process4 
    # process5 
    # process6 
    # etc.... 

一旦我分解了功能,我想要逐一應用它們。而不是按順序調用每個函數,是否有一種方法可以逐個遍歷它們?喜歡的東西:

def iterate_through_functions: 
    for function in functions: 
     # run each process function in order 

    def process1(): 
     # do something 
    def process2(): 
     # do something 
    def process3(): 
     # do something 
    def process4(): 
     # do something 
    def process5(): 
     # do something 
    def process6(): 
     # do something 
    def etc....(): 
     # do something 
+0

可能是:'函數=過程1,過程2,...]'然後遍歷... – mshsayem

+1

我很困惑的這句話,這聽起來像在並列陳述同一件事:「不需要調用每個函數按順序排列,是否有一種方法可以逐個遍歷它們?「這些不一樣嗎? – erewok

+0

我的意思是,如果我說了15個函數,我只需要寫出每個函數的名稱並調用它,而且感覺像很多手動編寫,而不是簡單地將它們單獨編寫爲列表。如果我動態生成這個工作列表 - 但我該如何迭代這些函數? – YPCrumble

回答

3

也許混淆瞭如何在迭代時調用函數?

def function1(): 
    print 'function1' 

def function2(): 
    print 'function2' 

functions = [function1, function2] 

for function in functions: 
    function() 
0

你可以用當地人()來運行的命名函數任意一組從像這樣的列表:

def x(): 
    print "x" 
def y(): 
    print "y" 
def z(): 
    print "z" 

for fxn in ['x','y','z']: 
    locals()[fxn]() 

使用這種方法,你應該能夠制定一個可配置的進程列表。

編輯:

這很好,如果你知道功能的名稱。如果你只是想運行你收集的函數,你可以簡單地從列表中迭代它們。

for fxn in [x,y,z]: 
    fxn() 

使用第一種方法的原因是,你可以使用文本模式編程方式建立你的功能列表一樣運行與「foo_」或「bar_」開頭的所有功能。如果您只是收集回調,請使用第二種方法。

+0

這是迭代每個mshsayem評論的函數的最佳方法嗎? – YPCrumble

+0

請參閱我編輯的答案。 – joel3000

0

Mshsayem的評論,你可以創建一個函數列表,並迭代通過它是正確的。但是,出於可讀性和調試的原因,除非您動態生成函數,並且您不知道其中會有多少函數,否則幾乎肯定會更好地調用每個函數。