2013-10-13 2 views
4

Я пытаюсь избежать сложной сети операторов if/elif/else.Pythonic альтернативы операторам if/else

Какие питонические подходы я могу использовать для достижения своей цели.

Вот что я хочу добиться:

Мой сценарий будет получать убивание разных URLs,

youtube.com, hulu.com, netflix.com, instagram.com, imgur.com и т.д. и т. д., возможно, 1000 разных доменов.

У меня будет функция/набор различных инструкций, которые будут вызываться для каждого отдельного сайта.

так ....

if urlParsed.netloc == "www.youtube.com": 
     youtube() 
    if urlParsed.netloc == "hulu.com": 
     hulu() 
    and so on for 100s of lines.... 

Есть в любом случае, чтобы избежать этого курса действий ... если хуг сайт сделать funcA, если хуг сайт сделать funcB.

Я хочу использовать это как урок реального мира, чтобы изучить некоторые предварительные структурирования моего кода на Python. Поэтому, пожалуйста, не стесняйтесь направлять меня к чему-то фундаментальному в Python или программированию в целом.

ответ

11

Используйте область отображения диспетчерская словарь для функции:

def default_handler(parsed_url): 
    pass 

def youtube_handler(parsed_url): 
    pass 

def hulu_handler(parsed_url): 
    pass 

handlers = { 
    'www.youtube.com': youtube_handler, 
    'hulu.com':  hulu_handler, 
} 

handler = handlers.get(urlParsed.netloc, default_handler) 
handler(urlParsed) 

функции Python являются объектами первого класса и могут быть сохранены в качестве значений в словаре так же, как и любой другой объект.

3

Вы можете использовать dict

myDict = {"www.youtube.com": youtube, "hulu.com": hulu} 

... 
... 

if urlParsed.netloc in myDict: 
    myDict[urlParsed.netloc]() 
else: 
    print "Unknown URL" 
Смежные вопросы