Во многих статьях, посвященных изучению python и его библиотек, при рассмотрении кода обычно говорится, что он «недостаточно питоничен». Но что это означает на самом деле? Давайте разберемся в этой статье.
Python — один из самых популярных языков, который одновременно прост в изучении и достаточно сложен для создания полнофункциональных приложений в любой области. Это динамически типизированный интерпретируемый язык, который, хотя и создан для лучшей читаемости, имеет свои преимущества. Одно из них — уникальный метод написания и структурирования кода с использованием синтаксиса, присущего только самому Python.
Когда программист объявляет фрагмент недостаточно «питоническим», он в основном имеет в виду, что код либо является дословным переводом с другого языка, либо что код можно сделать более читабельным, используя присущие Python особенности. Для дальнейшей иллюстрации этой концепции приведены два примера:
Упаковка кортежей
Если в Python есть несколько констант и значений, разделенных запятой ‘ , ‘, то интерпретатор Python автоматически воспринимает их как тип данных коллекции, известный как кортеж. Это широко известно как упаковка.
Эта утилита упаковки обычно используется, когда нам нужно передать или получить несколько аргументов, но у нас нет конкретного коллективного типа данных для использования. Поэтому для временных случаев упаковка кортежей делает блестящую работу по упаковке этих небольших случаев использования без особых усилий.
def sum_multiply_power(x, y):
a = x + y
b = x * y
c = x ** y
return a, b, c
ans = sum_multiply_power(5, 3)
print(ans)
>>> (8, 15, 125)
Подобно упаковке, в Python также есть распаковка кортежей, с помощью которой мы можем извлекать элементы типа данных коллекции в отдельные переменные без лишних усилий и хлопот.
ans1, ans2, ans3 = ans
print("The first part of ans is:", ans1)
print("The second part of ans is:", ans2)
print("The third part of ans is:", ans3)
>>> The first part of ans is: 8
>>> The second part of ans is: 15
>>> The third part of ans is: 125
Также при передаче значений в функцию или переменную и обратно распаковка элемента может быть выполнена с помощью оператора звездочки ‘*’:
def print_3_birds(a, b, c):
print("At first comes:", a)
print("Then comes:", b)
print("And lastly comes:", c)
blues = "Jake", "Jay", "Jim"
print_3_birds(*blues)
>>> At first comes: Jake
>>> Then comes: Jay
>>> And lastly comes: Jim
Понимание списков
Понимание списка — это уникальный способ добавления/обновления значений внутри типа данных списка, который также помогает создать новый список, используя значения из другого списка. Понимание списка делает его более читабельным, а также уменьшает сложность понимания работы циклов.
- Список без использования понимания:
evens = []
for i in range(100):
if(i%2==0):
evens.append(i)
- Список, созданный с использованием понимания:
evens = [i for i in range(100) if i%2==0]
- Обновление списка с помощью понимания:
odds = [i for i in range(100) if i%2==0]
odds = [num+1 for num in odds]
Еще одним удобным случаем использования понимания списка является то, что его можно использовать для вызова функций во время итерации по списку значений.
def pretty_print(val):
print("The value of this variable is:", val)
[pretty_print(num) for num in (odds+evens)]
[print(num) for num in odds if odds>20]
Одним словом, для питоновского способа кодирования нет предела. В новых версиях появляются новые техники, структуры и методы для написания той же логики в более удобочитаемой и более полной манере. Лучший способ освоить этот стиль кодирования — изучить документацию по Python, поставляемую с каждой новой версией, и поэкспериментировать с использованием различных реализаций для одной и той же логики.