Skip to content

Commit 78cfede

Browse files
committed
Что это за "python" в начале блоков когда? кажется, они лишние
1 parent 528d596 commit 78cfede

5 files changed

Lines changed: 0 additions & 34 deletions

File tree

1_python_basics/18_comments.md

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

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

7-
:::python
87
price = Column(BigInteger) # рубли * 100
98

109

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

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

45-
:::python
4643
# загружаем данные из файла data.json
4744
with open('users.json', 'r') as handler:
4845
data = json.load(handler)
4946

5047
Вот как можно исправить:
5148

52-
:::python
5349
with open('users.json', 'r') as handler:
5450
data = json.load(handler)
5551

5652
А так – ещё лучше:
5753

58-
:::python
5954
data = load_all_users_from_file()
6055

6156

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

67-
:::python
6862
# загружаем данные из файла data.json
6963
data = db_session.query(User).all()
7064

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

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

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

1_python_basics/2_base_types.md

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

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

10-
:::python
1110
2 + 2 # 4
1211
3 + 2.5 # 5.5
1312
6 / 2 # 3
@@ -20,7 +19,6 @@
2019

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

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

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

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

4845

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

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

1_python_basics/4_types.md

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

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

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

56-
:::python
5755
values = [1, 2, 3, 4, 5]
5856
new_values = []
5957
for value in values:
@@ -64,7 +62,6 @@
6462

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

67-
:::python
6865
values = [1, 2, 3, 4, 5]
6966
new_values = [value ** 2 for value in values if value % 2]
7067

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

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

78-
:::python
7975
user_info = {'name': 'Иван', 'level': 2}
8076
print(user_info['name']) # Иван
8177

8278

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

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

98-
:::python
9993
user_info = {'name': 'Иван', 'level': 2}
10094
for key, value in user_info.items():
10195
print '%s: %s' % (key, value)

1_python_basics/5_modules.md

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

133-
:::python
134133
# mod.py
135134
import sys
136135
from types import ModuleType

1_python_basics/6_tips_and_tricks.md

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

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

8-
:::cpp
98
for(int i = 0; i < books_amount; i++) {
109
cout << books[i];
1110
}
1211

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

15-
:::python
1614
for i in len(books):
1715
print(books[i])
1816

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

21-
:::python
2219
for book in books:
2320
print(book)
2421

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

27-
:::python
2824
i = 0
2925
for book in books:
3026
print(i, book)
3127
i += 1
3228

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

35-
:::python
3631
for book_number, book in enumerate(books):
3732
print(book_number, book)
3833

@@ -47,7 +42,6 @@
4742

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

50-
:::python
5145
try:
5246
latitude = float(input('Введите широту: '))
5347
except ValueError:
@@ -63,14 +57,12 @@
6357
###Меньше вложенности
6458
Загрузим json из файла:
6559

66-
:::python
6760
def load_json_data(filepath):
6861
with open(filepath, 'r') as file_handler:
6962
return json.load(file_handler)
7063

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

73-
:::python
7466
def load_json_data(filepath):
7567
if os.path.exists(filepath):
7668
with open(filepath, 'r') as file_handler:
@@ -82,7 +74,6 @@
8274
функции смысла нет.
8375
Избавляемся от `else`:
8476

85-
:::python
8677
def load_json_data(filepath):
8778
if os.path.exists(filepath):
8879
with open(filepath, 'r') as file_handler:
@@ -94,7 +85,6 @@
9485

9586
Упростить можно так:
9687

97-
:::python
9888
def load_json_data(filepath):
9989
if not os.path.exists(filepath):
10090
return None
@@ -107,25 +97,21 @@
10797
Часто в коде приходится проверять переменные на нулевые значения.
10898
Например, пустой список:
10999

110-
:::python
111100
if len(users) == 0:
112101
pass
113102

114103
Или пустая строка:
115104

116-
:::python
117105
if user.email == '':
118106
pass
119107

120108
Или ноль:
121109

122-
:::python
123110
if user.level == 0:
124111
pass
125112

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

128-
:::python
129115
if not users:
130116
pass
131117

@@ -177,7 +163,6 @@
177163

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

180-
:::python
181166
credentials = load_oauth_credentials_from_file('fb_creds.json')
182167
fb_api = get_facebook_api(credentials)
183168
messages = fb_api.get_unread_messages()

0 commit comments

Comments
 (0)