2016-02-27 3 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

Вы сказали' [я% Len (fn_list)] ', но до сих пор, что это просто номер в скобки , Чтобы получить функцию в этой позиции, вам нужно 'fn_list [i% len (fn_list)]'. – zondo

+0

Вам нужно поставить вызов 'print()' над другим вызовом функции. Затем сделайте 'print()' call' print (name.ljust (max (len (n) для n в name_list), 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 
Смежные вопросы