Skip to content

Commit 6f39d0a

Browse files
authored
Added more examples
1 parent f9c83bf commit 6f39d0a

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

README.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
- [Файлы `__init__.py`](#файлы-__init__py)
1616
- [Докстринги](#докстринги)
1717
- [Документация к REST API](#документация-к-rest-api)
18+
- [Про код](#про-код)
1819
- [Про Pull Request](#про-pull-request)
1920
- [Размер Pull Request](#размер-pull-request)
2021

@@ -187,6 +188,54 @@ from some.absolute.path import foo, bar
187188
**Почему?** Потому что это один из распространенных форматов для документирования REST API, которая вышла из Swagger. Данный формат документации поддерживается большим количеством клиентов (Swagger, Postman, Insomnia Designer и многие другие). Также, рукописная документация имеет свойство быстро устаревать, а документация, которая генерируется напрямую из кода позволяет не думать о постоянном обновлении документации.
188189

189190

191+
## Про код
192+
**1 действие ~ 1 строка**
193+
194+
На каждой строке надо постараться делать ровно одно действие.
195+
196+
Плохо ❌:
197+
```python
198+
# 1. 3 действия на одной строке - 3 вызова функции
199+
foo_result = foo(bar(spam(x)))
200+
201+
# 2. 3 действия на одной строке - вызов функции foo, get_c, from_b
202+
foo_result = foo(a=a, b=b, c=get_c(from_b())
203+
204+
# 3. 3 действия на одной строке - фильтрация по аргументам, условное получение элементов (через or), вызов метода .value
205+
result = [(a.value() or A, b or B) for a, b in iterator if a < b]
206+
207+
# 4. 4 действия на одной строке - из библиотеки / переменной foo идет получение атрибута bar, получение атрибута spam, получение атрибута hello и вызов calculate_weather
208+
result = calculate_weather(foo.bar.spam.hello)
209+
```
210+
211+
Хорошо ✅:
212+
```python
213+
# 1. делаем поочередный вызов каждой функции
214+
spam_result = spam(x)
215+
bar_result = bar(spam_result)
216+
foo_result = foo(bar_result)
217+
218+
# 2. поочередно вызываем функции, результат пишем в переменную и используем ее при вызове foo
219+
from_b_result = from_b()
220+
c = get_c(from_b_result)
221+
foo_result = foo(a=a, b=b, c=c)
222+
223+
# 3. последовательно проводим действия над списком - вначале фильтруем, вызываем метод .value у a, выбираем между элементами (or)
224+
filtered_result = ((a, b) for a, b in iterator if a < b)
225+
intermediate_result = ((a.value(), b) for a, b in filtered_result)
226+
result = [(a or A, b or B) for a, b in intermediate_result]
227+
228+
# 4 . последовательно читаем атрибуты bar, spam, hello и вызываем функцию calculate_weather
229+
bar = foo.bar
230+
spam = bar.spam
231+
hello = spam.hello
232+
result = calculate_weather(hello)
233+
```
234+
235+
236+
**Почему?** Потому что код становится более читабельным, не нужно исполнять несколько выражений в голове во время чтения кода. Разбитый до простых атомных операций код воспринимается гораздо лучше, чем сложный уан-лайнер. Постарайтесь упростить свой код настолько, насколько это возможно - код чаще читается, чем пишется.
237+
238+
190239
## Про Pull Request
191240
**1 Pull Request = 1 issue**
192241

0 commit comments

Comments
 (0)