2014-10-09 4 views
3

Я все еще учусь Python, и мне интересно, если есть «более Pythonic» путь для следующего:Что такое питонический способ «повторить это до тех пор, пока условие не достигнет максимума?»

MAX_ATTEMPTS = 5 
for i in range(MAX_ATTEMPTS): 
    response = do_something() 
    do_something_based_on(response) 
    do_another_thing_based_on(response) 
    if response == 0: 
     do_something_if_success() 
     break 

Edit: Извиняюсь, я мог бы иметь более упростило дело. Мне нужно использовать response перед окончательной проверкой, поэтому я должен записать его в переменной.

ответ

2

Это похоже на совершенно правильный способ реализовать то, что вы хотите.

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

+0

Звуки ... комплекс: D Да, я предполагаю, что я иногда overthink вещи слишком много пытается быть Pythonic :) – pepoluan

3

Я думаю, что этот способ позволит сэкономить больше памяти, чем у вас:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

MAX_ATTEMPTS = 5 
for i in xrange(MAX_ATTEMPTS): 
    if 0 == do_something(): 
     do_something_if_success() 
     break 

EDIT:

Обновления в соответствии с последним quesiton.

MAX_ATTEMPTS = 5 
for i in xrange(MAX_ATTEMPTS): 
    response = do_something() 
    do_something_based_on(response) 
    do_another_thing_based_on(response) 
    if 0 == response: 
     do_something_if_success() 
     break 
+0

ахахаха, имеет смысл. Я мог бы упростить этот случай ... переменная 'response' фактически используется перед оператором' if'. Я отредактирую свою публикацию. – pepoluan

+1

@pepoluan Тогда ваш код отлично подходит :) – TerryA

+1

@pepoluan Тогда я думаю, что достаточно просто заменить «диапазон» на «xrange». Написание 0 перед «==» является рекомендуемым способом, чтобы избежать написания «=» по ошибке. Кстати, я думаю, PEP8 ответит на многие ваши вопросы. –

Смежные вопросы