Комментарии 24
users = [('Sam', 18, 'male'), ('Lisa', 25, 'female')]
name, age, sex = 0, 1, 2
for user in users:
print(user[name], '-', user[age])
name, age, sex = range(3)
А не проще ли
for (name, age, sex) in users:
print(name, '-', age)
?
Лишние переменные можно заменить подчеркиваниями, например:
for (name, _, _, _, email) in users:
print(name, '-', email)
А кортежи часто бывают при чтении из файла.
Если нужны только первый и последний элементы — есть ещё такой вариант (*_
собирает всё остальное в список):
In [1]: for first, *_, last in (range(10), range(42)):
...: print(f'{first=}, {last=}, {len(_)=}')
...:
first=0, last=9, len(_)=8
first=0, last=41, len(_)=40
for (name, *_, email) in users:
print(name, '-', email)
for (name, age, nil) in users:
print(name, '-', age)
for name, age, nil in users:
print(name, '-', age, nil)
for name, _, _ in users:
print(name, _)
А явно указать там в присвоении None нельзя:
for name, age, None in users:Кстати, кортеж, когда он используется для получения значений не обязательно заключать в скобки.
SyntaxError: can't assign to keyword
Так плохо, ненужные переменные затеняют подчеркиванием.
не все системы поддерживают скрытие паролей
ищет наилучшие, «достаточно хорошие» совпадения
принадлежности его к некоей сети
в коде задают точки останова и исследуют программу
[...]
Такое ощущение, что текст заметки тоже написан на питоне: чем меньше строгости в определениях — тем лучше.
Похоже автор наворовал советы и скомпилировал статью.
Других причин зачем он делает столько лишних действий с pdb представить тяжело, ведь даже в доке https://docs.python.org/3/library/pdb.html написано что править и лишний раз прогонять скрипт не обязательно, можно вызвать python -m pdb script.py и pdb командами читать листинг, ставить/убирать брейкпойнты и продолжать выполнение.
Кэширование результатов вызова функций с помощью декоратора
Тут мне ещё хотелось бы отметить то, что кэширование нельзя использовать с функциями, у которых есть побочные эффекты, или с функциями, создающими мутабельные объекты при каждом вызове.
В примере функция с побочным эффектом.
А вдруг сайт не работает? В прошлый раз вернул 200, а щас уже Not Found. Любое IO по сути делает функцию не чистой.
А в чем побочный эффект-то? Так-то и содержимое сайта может измениться, понятно, что кэшированный результат об этом не узнаёт.
Именованные слайсы вообще почти никогда не нужны. Если вы только не работаете с ужасно отформатированными строками.
Полезные советы по Python, которых вы ещё не встречали. Часть 2