Сложные выражения
Анти-паттерн
Сложно понять, что происходит в коде, когда в одной строке выполняется сразу много операций: и вызовы функций, и сложение, и вычитание, и сравнение. Приходится распутывать выражение, мысленно разбирая его на части.
Пример 1¶
Сложные выражения лучше разбивать, помещая промежуточные результаты в переменные с понятными названиями.
Плохо:
for number, link in enumerate(response.json()['links']['flickr']['original'], start=1):
...
Хорошо:
image_links = response.json()['links']['flickr']['original']
for number, link in enumerate(image_links, start=1):
...
Пример 2¶
Плохо:
import os
import urllib
def get_extension(url):
image_link_index = 2
extension_index = 1
extension = os.path.splitext((urllib.parse.urlsplit(url)[image_link_index]))[extension_index]
return extension
Хорошо:
import os
import urllib
def get_extension(url):
image_link_index = 2
extension_index = 1
image_link = urllib.parse.urlsplit(url)[image_link_index]
extension = os.path.splitext(image_link)[extension_index]
return extension
Хорошо:
import os
import urllib
def get_extension(url):
image_link_index = 2
extension_index = 1
image_link = urllib.parse.urlsplit(url)[image_link_index]
return os.path.splitext(image_link)[extension_index]
Хорошо:
import os
import urllib
def get_extension(url):
image_link_index = 2
image_link = urllib.parse.urlsplit(url)[image_link_index]
_, extension = os.path.splitext(image_link)
return extension