Незалежно від того подобається вам чи ні, ви кожного дня використовуєте різні мови програмування: SQL, Javascript, Python, C++ та інші. Відомо, що вивчення різних мов програмування є ключем справжнього професіоналізму, але великий відсоток програмістів з цим не рахуються або, спробувавши, вирішують, що це пуста трата часу. Після багатьох років спілкування та праці з такими спеціалістами,я зрозумів, що вони вивчають синтакс мови, можливо - роботу з деякими основними бібліотеками та фреймворками, але так і не пізнають суть мови, її "душу".
Приклади:
# Погано: вам потрібно читати до кінця, щоб зрозуміти мету коду
img.find('.jpg') != -1
img.find('.jpg') >= 0
# Легше для читання
'.jpg' in img
'.jpg' not in img
# Погано. Строге обрізання по числу
img[-4:] == '.jpg'
# Добре. Працює з рядком будь-якої довжини
img.endswith('.jpg')
# Погано
(img.endswith('.jpg') or img.endswith('.jpeg') or img.endswith('.png') or
img.endswith('.gif')
# Добре: використовуються вбудовані можливості python, для більш компактного коду
img.endswith((".jpg", ".jpeg", ".png", ".gif"))
# Погано
path == 'js' or path == 'css' or path == 'img' or path == 'font' or path == 'fonts'
# Добре. Компактний код
path in ('js', 'css', 'img', 'font', 'fonts')
# Погано
(os.path.exists(os.path.join(path, "space")) or
os.path.exists(os.path.join(path, "bucket")) or
os.path.exists(os.path.join(path, "actor"))
# Добре. Компактний код. Краще читається. Список може бути переміщеним в інший файл
any(os.path.exists(os.path.join(path, item)) for item in ["space", "bucket", "actor"])
# Погано
for i in range(len(lst)):
elt = lst[i]
print i, elt
# Добре. Використовуємо вбудовані python функції
for i, elt in enumerate(lst):
print i, elt
# Погано
print 'Привіт ', name, '. Тобі ', age, ' років'
# Добре. Відображає структуру вашого виводу
print 'Привіт {name}. Тобі {age} років'.format(name=name, age=age)
# Погано
if not (key in dict):
print 'Ключ відсутній'
# Добре. Читається краще
if key not in dict:
print 'Ключ відсутній'
# Погано
s = names[0]
for name in names[1:]:
s += ', ' + name
# Добре. Не виникає проблеми з одним елементом. Також швидше
s = ', '.join(names)
# Погано
# Визначаємо, що array1 підмножина array2
is_subset = True
for x in array1:
found = False
for y in array2:
if x == y:
found = True
break
if not found:
is_subset = False
break
# Добре. 2 рядки коду замість 10!
def subset_of(array1, array2):
return set(array1).issubset(array2)
# Погано
if case_sensitivity.lower() == 'sensitive':
matcher = fnmatch.fnmatchcase
elif case_sensitivity.lower() == 'insensitive':
def matcher(fname, pattern):
return fnmatch.fnmatchcase(fname.lower(), pattern.lower())
else:
matcher = fnmatch.fnmatch
# Добре. Код може бути переміщений в інший файл
matchers = {
'sensitive': fnmatch.fnmatchcase
'insensitive': lambda fname, pattern: fnmatch.fnmatchcase(fname.lower(), pattern.lower())
}.get(case_sensitivity.lower(), fnmatch.fnmatch)
Ще немає коментарів