Skip to content

Commit 5a00410

Browse files
committed
Revert "Что это за "python" в начале блоков когда? кажется, они лишние"
This reverts commit 78cfede.
1 parent 0d08d93 commit 5a00410

5 files changed

Lines changed: 34 additions & 0 deletions

File tree

1_python_basics/18_comments.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
Комментарии – способ прокомментировать код на ходу, на той же строке.
66

7+
:::python
78
price = Column(BigInteger) # рубли * 100
89

910

@@ -13,6 +14,7 @@
1314
Она нужна для документирования всей функции: описания входящих параметров, результата, логики, крайних случаев.
1415
Заключается в тройные двойные кавычки. Вот так:
1516

17+
:::python
1618
def tensorsolve(a, b, axes=None):
1719
"""
1820
Solve the tensor equation ``a x = b`` for x.
@@ -40,17 +42,20 @@
4042
В таком случае комментарий не несёт дополнительной информации, а просто переводит соседний код
4143
с Питона на русский/английский. Пример:
4244

45+
:::python
4346
# загружаем данные из файла data.json
4447
with open('users.json', 'r') as handler:
4548
data = json.load(handler)
4649

4750
Вот как можно исправить:
4851

52+
:::python
4953
with open('users.json', 'r') as handler:
5054
data = json.load(handler)
5155

5256
А так – ещё лучше:
5357

58+
:::python
5459
data = load_all_users_from_file()
5560

5661

@@ -59,6 +64,7 @@
5964
Другая частая ошибка: не менять комментарии при изменении кода. В примере выше мы загружали данные из файла.
6065
Через месяц взялись за голову и поселили данные в базе данных. Код стал таким:
6166

67+
:::python
6268
# загружаем данные из файла data.json
6369
data = db_session.query(User).all()
6470

@@ -71,6 +77,7 @@
7177
В таком состоянии всё поведение кажется понятным, поэтому разработчик может оставить комментарий самому себе.
7278
Проблема в том, что когда он переключится на другую задачу и забудет про детали, комментарий может взорвать мозг:
7379

80+
:::python
7481
inv(strain_tensor) - rigidity.T # правый случай
7582

7683
Правый, правда? Ну, теперь всё понятно.

1_python_basics/2_base_types.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
Числа – и в Африке числа. С ними можно производить арифметические действия. Всё просто:
99

10+
:::python
1011
2 + 2 # 4
1112
3 + 2.5 # 5.5
1213
6 / 2 # 3
@@ -19,6 +20,7 @@
1920

2021
Помимо чисел в Питоне есть строки с богатым набором встроенных функций. С ними просто и удобно работать:
2122

23+
:::python
2224
'hello' # строковая константа
2325
"hello" # тип кавычек не имеет значения
2426
hello[1] # 'e'
@@ -27,6 +29,7 @@
2729

2830
У них много встроенных функций:
2931

32+
:::python
3033
'hello '.strip() # 'hello'
3134
'hello world'.upper() # 'HELLO WORLD'
3235
len('hello') # 5
@@ -43,6 +46,7 @@
4346
Элементы могут быть разных типов, даже другими списками. Выглядит он так:
4447

4548

49+
:::python
4650
[1, 2, 3] # в квадратных скобках, элементы через запятую
4751
digits = [4, 5, 6] # переменная, в которой живёт список
4852
digits[0] # 4 (нумерация с нуля)
@@ -52,6 +56,7 @@
5256
Из списка надо часто получить подсписок: несколько первых элементов, последних, что-то из середины.
5357
Это называется срезами и позволяет делать много чего. Вот самые простые срезы:
5458

59+
:::python
5560
squares = [1, 4, 9, 16, 25, 36, 49]
5661
squares[1:3] # [4, 9] (элементы со второго по третий)
5762
squares[:4] # [1, 4, 9, 16] (элементы с начала до четвёртого)

1_python_basics/4_types.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
Ещё строки можно форматировать, причём несколькими способами. Вот один из них:
3030

31+
:::python
3132
name = 'Пётр'
3233
height = 1.865
3334
print('Привет, %s! Твой рост – %.2f м.' % (name, height))
@@ -52,6 +53,7 @@
5253
Часто бывает надо взять исходный список и сформировать из него новый, применив к каждому элементу исходного
5354
какое-то преобразование и как-то отфильтровав. Например, так:
5455

56+
:::python
5557
values = [1, 2, 3, 4, 5]
5658
new_values = []
5759
for value in values:
@@ -62,6 +64,7 @@
6264

6365
Эта операция настолько частая, что для неё есть отдельная конструкция – list comprehension. Выглядит она так:
6466

67+
:::python
6568
values = [1, 2, 3, 4, 5]
6669
new_values = [value ** 2 for value in values if value % 2]
6770

@@ -72,12 +75,14 @@
7275

7376
Словарь – это отображение одних элементов в другие. Первые называют ключами, вторые – значениями.
7477

78+
:::python
7579
user_info = {'name': 'Иван', 'level': 2}
7680
print(user_info['name']) # Иван
7781

7882

7983
Из словаря можно удалять, менять и добавлять в него элементы:
8084

85+
:::python
8186
user_info = {'name': 'Иван', 'level': 2}
8287
user_info['middle_name'] = 'Иванович'
8388
user_info['name'] = 'Грирогий'
@@ -90,6 +95,7 @@
9095
Ещё у словарей есть несколько важных методов: `keys`, `values` и `items`. Первый возвращает список только ключей,
9196
второй – список только значений, третий – список пар из ключей и значений. Удобно при итерации по словарю:
9297

98+
:::python
9399
user_info = {'name': 'Иван', 'level': 2}
94100
for key, value in user_info.items():
95101
print '%s: %s' % (key, value)

1_python_basics/5_modules.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@
139139
В памяти все загруженные модули хранятся в `sys.modules`. Иногда встречаются случаи, когда файла нет, а модуль есть.
140140
Это не сложно устроить:
141141

142+
:::python
142143
# mod.py
143144
import sys
144145
from types import ModuleType

1_python_basics/6_tips_and_tricks.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,34 @@
55

66
Раньше в C++ итерация по коллекции проходила так:
77

8+
:::cpp
89
for(int i = 0; i < books_amount; i++) {
910
cout << books[i];
1011
}
1112

1213
Этот же способ используется в других языках. Поэтому на Питоне хочется написать так же:
1314

15+
:::python
1416
for i in len(books):
1517
print(books[i])
1618

1719
Это неудобная дичь, древность и вообще. Вот как надо:
1820

21+
:::python
1922
for book in books:
2023
print(book)
2124

2225
Часто вместе с элементом нужен его номер. Памятуя, что можно итерировать по коллекции, хочется сделать как-то так:
2326

27+
:::python
2428
i = 0
2529
for book in books:
2630
print(i, book)
2731
i += 1
2832

2933
Это тоже неудобная дичь, древность и вообще. Для этого есть встроенная функция `enumerate`:
3034

35+
:::python
3136
for book_number, book in enumerate(books):
3237
print(book_number, book)
3338

@@ -43,6 +48,7 @@
4348

4449
Для "ничего" в Питоне есть `None`. Не пустая строка и не -1, а именно `None`:
4550

51+
:::python
4652
try:
4753
latitude = float(input('Введите широту: '))
4854
except ValueError:
@@ -59,12 +65,14 @@
5965

6066
Загрузим json из файла:
6167

68+
:::python
6269
def load_json_data(filepath):
6370
with open(filepath, 'r') as file_handler:
6471
return json.load(file_handler)
6572

6673
Всё сломается, если передать путь до несуществующего файла. Исправим:
6774

75+
:::python
6876
def load_json_data(filepath):
6977
if os.path.exists(filepath):
7078
with open(filepath, 'r') as file_handler:
@@ -76,6 +84,7 @@
7684
функции смысла нет.
7785
Избавляемся от `else`:
7886

87+
:::python
7988
def load_json_data(filepath):
8089
if os.path.exists(filepath):
8190
with open(filepath, 'r') as file_handler:
@@ -87,6 +96,7 @@
8796

8897
Упростить можно так:
8998

99+
:::python
90100
def load_json_data(filepath):
91101
if not os.path.exists(filepath):
92102
return None
@@ -100,21 +110,25 @@
100110
Часто в коде приходится проверять переменные на нулевые значения.
101111
Например, пустой список:
102112

113+
:::python
103114
if len(users) == 0:
104115
pass
105116

106117
Или пустая строка:
107118

119+
:::python
108120
if user.email == '':
109121
pass
110122

111123
Или ноль:
112124

125+
:::python
113126
if user.level == 0:
114127
pass
115128

116129
Все три примера выше – неверные. Вот их верные аналоги:
117130

131+
:::python
118132
if not users:
119133
pass
120134

@@ -172,6 +186,7 @@
172186

173187
Понятным – это когда с первого взгляда понятно, что он делает:
174188

189+
:::python
175190
credentials = load_oauth_credentials_from_file('fb_creds.json')
176191
fb_api = get_facebook_api(credentials)
177192
messages = fb_api.get_unread_messages()

0 commit comments

Comments
 (0)