2016-02-27 55 views
-1

我有一組3個函數以及一個名稱列表。我試圖循環這些名稱併爲每個名稱調用一個函數。我的蟒蛇看起來像這樣...列表中每個項目的Python調用函數

def testfunc1(): 
    print("This is a test function 1") 
    #print(name) 

def testfunc2(): 
    print("This is a test function 2") 
    #print(name) 

def testfunc3(): 
    print("This is a test function 3") 
    #print(name) 


name_list = ["John", "Joe", "Paul" "George", "Mark", "Craig", "Norman"] 
fn_list = [testfunc1(), testfunc2(), testfunc3() ] 


for i, name in enumerate(name_list): 
    [i % len(fn_list)]() 
    print(name) 

而且我想這樣的事情發生......

John - Run testfunc1 
Joe - Run testfunc2 
Paul - Run testfunc3 
George - Run testfunc1 
Mark - Run testfunc2 
Craig - Run testfunc3 
Norman - Run testfunc1 

我有幾個問題,我當前的代碼,第一個是,目前我得到以下錯誤...

TypeError: 'list' object is not callable 

任何人都可以幫我解決嗎?

+0

你忘了提供'fn_list'索引到 – jonrsharpe

+0

你說'[I%LEN(fn_list)]',但迄今爲止,這只是一個數目由括號包圍。要獲得該位置的函數,你需要'fn_list [i%len(fn_list)]'。 – zondo

+0

您需要將'print()'調用放在另一個函數調用的上方。然後,使print()調用print(name.ljust(name_list中的n爲len(len(n)),end =「」)'在你的測試函數中打印' - 運行testfunc# '是功能號碼。 – zondo

回答

2
[i % len(fn_list)]() 

什麼你actualy做的是「呼叫號碼」由括號([number]())所包圍,你需要先添加列表中引用的名稱。

name_list = ["John", "Joe", "Paul" "George", "Mark", "Craig", "Norman"] 
# You need to store the functions' references, not their return values 
fn_list = [testfunc1, testfunc2, testfunc3] # remove the parentheses 


for i, name in enumerate(name_list): 
    (fn_list[i % len(fn_list)])() # fn_list[ ... ] 
    print(name) 

輸出:

This is a test function 1 
John 
This is a test function 2 
Joe 
This is a test function 3 
PaulGeorge 
This is a test function 1 
Mark 
This is a test function 2 
Craig 
This is a test function 3 
Norman 
相關問題