Блок
Вывод:
Мы в MAX
👉@BookPython
else
для выражений for
и try
используется довольно редко. Однако, комбинируя их вместе, можно написать код, который выполняет итерацию по коллекции до первого успешного результата без использования дополнительных флагов.
import logging
from typing import List, Optional
logging.basicConfig(level=logging.DEBUG)
def first_int(iterable: List[str]) -> Optional[int]:
for x in iterable:
try:
result = int(x)
except ValueError:
logging.debug('Bad int: %s', x)
else:
break
else:
result = None
logging.error('No int found')
return result
print(first_int(('a', 'b', '42', 'c')))
Вывод:
DEBUG:root:Bad int: a
DEBUG:root:Bad int: b
42
Мы в MAX
👉@BookPython
👍2👎2
Please open Telegram to view this post
VIEW IN TELEGRAM
В Python 3 методы
Можно утверждать, что индексация ключей не особо нужна, так как их порядок случайный, но это не совсем так. Во-первых,
Мы в MAX
👉@BookPython
keys
, values
и items
для словарей возвращают объекты-представления (view objects). В Python 2 они возвращали списки. Основное различие в том, что представления не хранят все элементы в памяти, а предоставляют их по мере запроса. Это работает отлично, пока вы просто итерируете ключи (что обычно и делается), но теперь вы не можете получить доступ к элементам по индексу.
TypeError: 'dict_keys' object does not support indexing
Можно утверждать, что индексация ключей не особо нужна, так как их порядок случайный, но это не совсем так. Во-первых,
d.keys()[0]
может быть удобным способом получить любой ключ (используйте next(iter(d.keys()))
в Python 3). Во-вторых, начиная с Python 3.6, словари в CPython упорядочены по порядку добавления, и с версии Python 3.7 это стало стандартной особенностью языка.Мы в MAX
👉@BookPython
👍2❤1