Почему действительно еще ведет себя по-другому в для/в то время как операторов в противоположность если/попытка операторы?

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

Примечание, что эта техника может использоваться не только для обработки верхних проблем / проблем нижнего регистра, но и для других типов сортировки, таких как локаль определенная сортировка или заголовок "стиля Библиотеки", сортирующий, который игнорирует передовицы и иначе нормализует данные прежде, чем отсортировать их.

6
задан Tim Pietzcker 16 October 2009 в 06:58
поделиться

3 ответа

Ну, это зависит от того, как вы это видите. Вы можете посмотреть на elses вот так (извините за крик, это единственный способ сделать акцент в коде):

if condition:
   do_something()
IF THE PREVIOUS CONDITION WAS FALSE:
   do_something_else()

Теперь есть очевидное сходство между if / else и try / except / else, если вы видите else оператор как else к оператору except. Примерно так.

try:
   do_something()
IF THERE WAS AN EXCEPTION:
   pass:
IF THE PREVIOUS CONDITION WAS FALSE:
   do_something_else()
finally:
   cleanup()

То же самое и с else / for:

IF some_iterator IS NOT EMPTY:
   i = next(some_iterator)
   print(i)
IF THE PREVIOUS CONDITION WAS FALSE:
   print("Iterator is empty!")

Итак, здесь мы видим, что else в некотором фундаментальном смысле do работает точно так же во всех трех случаях.

Но вы также можете увидеть else таким образом:

try:
   do_something()
except someException:
   pass:
IF NO EXCEPTION:
   do_something_else()
finally:
   cleanup()

И тогда это уже не то же самое, а else, потому что что-то вроде «если ничего другого». Таким же образом вы можете увидеть for / else:

for i in some_iterator:
   print(i)
IF NO MORE ITERATING:
   print("Iterator is empty!")

Но опять же, учитывая elif,

5
ответ дан 8 December 2019 в 05:55
поделиться

Конструкция for else выполняет предложение else , если для цикла не выполнялась инструкция break , как описано здесь Например, это предложение else никогда не вычисляется

for i in range(1,10):
    if i % 5 == 0:
       print i
       break
else:
    print "nothing divisible by 5"
13
ответ дан 8 December 2019 в 05:55
поделиться

Да, как упомянул Эли, предложение else выполняется только в том случае, если вы не нарушите его. Это мешает вам реализовать такой код:

for i in range(1,10):
    if i % 5 == 0:
       print i
       break
if i % 5 != 0:
   print "nothing divisible by 5"

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

4
ответ дан 8 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: