Решение на Ретроспекция от Йордан Джамбазов

Обратно към всички решения

Към профила на Йордан Джамбазов

Резултати

  • 0 точки от тестове
  • 6 бонус точки
  • 6 точки общо
  • 0 успешни тест(а)
  • 0 неуспешни тест(а)

Код

REPOSITORY = 'https://github.com/jordanjambazov/python-retrospective'
# Двадесет неща, които научих.
#
# 1. Ако пишеш на Python 3 няма нужда от `# -*- coding: utf-8 -*-`
# по подразбиране всичко е Unicode.
# 2. Python е доста експресивен език и като цяло няма нужда от
# коментари по кода. Коментарите могат да бъдат объркващи и
# да нарушават четимостта.
# 3. Built-in функциите any и all могат да бъдат доста полезни
# и ни помагат да съкратим кода, когато искаме да проверим
# булеви стойности в масив.
# 4. В Python 3 функцията reduce е преместена в functools модула.
# Все пак в 99% от случаите експлицитен for цикъл е по-четим.
# 5. Новият super() може да бъде извикван без аргументи, класът
# и обекта, за който се извиква автоматично се определят.
# 6. Добавена е нова built-in функция next(), която извиква __next__
# метода на обекта. Доста полезно при работа с итератори.
# 7. Добра практика е кода да се тества за съвместимост с PEP8
# конвенцията, което става доста лесно с модула pep8. След това
# извикваме `python3 -m pep8 test.py` и лесно забелязваме
# лошите практики.
# 8. Можем да използваме __new__ за да контролираме създаването
# на нов обект. Това е метода, който се извиква преди всички
# останали, и отговаря за създаването на самият обект. След
# това __init__ прави самата инициализация на данните във вече
# съществуващия обект на класа.
# 9. В Python 3 не може да се използват u"..." литерали за
# създаването на Unicode текст (всички стрингове са Unicode) по
# подразбиране. Може да се използват b"..." литерали за двоична
# информация.
# 10. Можем да използваме Dictonary Comprehension. Например,
# `{k: v for k, v in stuff}` означава същото като dict(stuff),
# но е доста по-гъвкаво.
# 11. Имаме литерален синтаксис за set, например `{1, 2}`. Трябва
# да се има впредвид, че `{}` ще върне празен речник, а за създаване
# на празен set трябва да използваме `set()`
# 12. Изрази от типа на `3/2` в Python 3 връщат float. За да имаме
# старото поведение, трябва да използваме `3//2`.
# 13. Можем да правим разширено разпакетиране на итерируеми по следният
# начин: `a, b, *rest = some_sequence`
# 14. Добавена е нова резервирана дума, nonlocal, която позволява да
# променяме стойността на променлива извън локалния scope, но не в
# глобалния.
# 15. По-добре е да се използва format() метода за форматиране на
# текст, отколкото `%` оператора, който е deprecated.
# 16. Синтаксиса за метакласове в Python 3 е следният:
# `class C(metaclass=M):`, и __metaclass__ променливата вече не
# се поддържа.
# 17. На функцията print() може да й бъде променен разделителят:
# ` print("There are <", 2**32, "> possibilities!", sep="")`
# 18. Можем да използваме with-statement и контекстни мениждъри,
# когато искаме да изпълним код, който трябва да бъде енкапсулиран.
# 19. Test-driven разработката на софтуер ни помага да пишем по-добър
# код.
# 20. Beautiful is better than ugly.
# Explicit is better than implicit.
# Simple is better than complex.
# Complex is better than complicated.
# Flat is better than nested.
# Sparse is better than dense.
# Readability counts.
# Special cases aren't special enough to break the rules.
# Although practicality beats purity.
# Errors should never pass silently.
# Unless explicitly silenced.
# In the face of ambiguity, refuse the temptation to guess.
# There should be one-- and preferably only one --obvious way to do it.
# Although that way may not be obvious at first unless you're Dutch.
# Now is better than never.
# Although never is often better than *right* now.
# If the implementation is hard to explain, it's a bad idea.
# If the implementation is easy to explain, it may be a good idea.
# Namespaces are one honking great idea -- let's do more of those!

История (1 версия и 2 коментара)

Йордан обнови решението на 29.04.2013 05:55 (преди почти 11 години)

+REPOSITORY = 'https://github.com/jordanjambazov/python-retrospective'
+
+# Двадесет неща, които научих.
+#
+# 1. Ако пишеш на Python 3 няма нужда от `# -*- coding: utf-8 -*-`
+# по подразбиране всичко е Unicode.
+# 2. Python е доста експресивен език и като цяло няма нужда от
+# коментари по кода. Коментарите могат да бъдат объркващи и
+# да нарушават четимостта.
+# 3. Built-in функциите any и all могат да бъдат доста полезни
+# и ни помагат да съкратим кода, когато искаме да проверим
+# булеви стойности в масив.
+# 4. В Python 3 функцията reduce е преместена в functools модула.
+# Все пак в 99% от случаите експлицитен for цикъл е по-четим.
+# 5. Новият super() може да бъде извикван без аргументи, класът
+# и обекта, за който се извиква автоматично се определят.
+# 6. Добавена е нова built-in функция next(), която извиква __next__
+# метода на обекта. Доста полезно при работа с итератори.
+# 7. Добра практика е кода да се тества за съвместимост с PEP8
+# конвенцията, което става доста лесно с модула pep8. След това
+# извикваме `python3 -m pep8 test.py` и лесно забелязваме
+# лошите практики.
+# 8. Можем да използваме __new__ за да контролираме създаването
+# на нов обект. Това е метода, който се извиква преди всички
+# останали, и отговаря за създаването на самият обект. След
+# това __init__ прави самата инициализация на данните във вече
+# съществуващия обект на класа.
+# 9. В Python 3 не може да се използват u"..." литерали за
+# създаването на Unicode текст (всички стрингове са Unicode) по
+# подразбиране. Може да се използват b"..." литерали за двоична
+# информация.
+# 10. Можем да използваме Dictonary Comprehension. Например,
+# `{k: v for k, v in stuff}` означава същото като dict(stuff),
+# но е доста по-гъвкаво.
+# 11. Имаме литерален синтаксис за set, например `{1, 2}`. Трябва
+# да се има впредвид, че `{}` ще върне празен речник, а за създаване
+# на празен set трябва да използваме `set()`
+# 12. Изрази от типа на `3/2` в Python 3 връщат float. За да имаме
+# старото поведение, трябва да използваме `3//2`.
+# 13. Можем да правим разширено разпакетиране на итерируеми по следният
+# начин: `a, b, *rest = some_sequence`
+# 14. Добавена е нова резервирана дума, nonlocal, която позволява да
+# променяме стойността на променлива извън локалния scope, но не в
+# глобалния.
+# 15. По-добре е да се използва format() метода за форматиране на
+# текст, отколкото `%` оператора, който е deprecated.
+# 16. Синтаксиса за метакласове в Python 3 е следният:
+# `class C(metaclass=M):`, и __metaclass__ променливата вече не
+# се поддържа.
+# 17. На функцията print() може да й бъде променен разделителят:
+# ` print("There are <", 2**32, "> possibilities!", sep="")`
+# 18. Можем да използваме with-statement и контекстни мениждъри,
+# когато искаме да изпълним код, който трябва да бъде енкапсулиран.
+# 19. Test-driven разработката на софтуер ни помага да пишем по-добър
+# код.
+# 20. Beautiful is better than ugly.
+# Explicit is better than implicit.
+# Simple is better than complex.
+# Complex is better than complicated.
+# Flat is better than nested.
+# Sparse is better than dense.
+# Readability counts.
+# Special cases aren't special enough to break the rules.
+# Although practicality beats purity.
+# Errors should never pass silently.
+# Unless explicitly silenced.
+# In the face of ambiguity, refuse the temptation to guess.
+# There should be one-- and preferably only one --obvious way to do it.
+# Although that way may not be obvious at first unless you're Dutch.
+# Now is better than never.
+# Although never is often better than *right* now.
+# If the implementation is hard to explain, it's a bad idea.
+# If the implementation is easy to explain, it may be a good idea.
+# Namespaces are one honking great idea -- let's do more of those!