|
5 | 5 |
|
6 | 6 | Раньше в C++ итерация по коллекции проходила так: |
7 | 7 |
|
8 | | - :::cpp |
9 | 8 | for(int i = 0; i < books_amount; i++) { |
10 | 9 | cout << books[i]; |
11 | 10 | } |
12 | 11 |
|
13 | 12 | Этот же способ используется в других языках. Поэтому на Питоне хочется написать так же: |
14 | 13 |
|
15 | | - :::python |
16 | 14 | for i in len(books): |
17 | 15 | print(books[i]) |
18 | 16 |
|
19 | 17 | Это неудобная дичь, древность и вообще. Вот как надо: |
20 | 18 |
|
21 | | - :::python |
22 | 19 | for book in books: |
23 | 20 | print(book) |
24 | 21 |
|
25 | 22 | Часто вместе с элементом нужен его номер. Памятуя, что можно итерировать по коллекции, хочется сделать как-то так: |
26 | 23 |
|
27 | | - :::python |
28 | 24 | i = 0 |
29 | 25 | for book in books: |
30 | 26 | print(i, book) |
31 | 27 | i += 1 |
32 | 28 |
|
33 | 29 | Это тоже неудобная дичь, древность и вообще. Для этого есть встроенная функция `enumerate`: |
34 | 30 |
|
35 | | - :::python |
36 | 31 | for book_number, book in enumerate(books): |
37 | 32 | print(book_number, book) |
38 | 33 |
|
|
47 | 42 |
|
48 | 43 | Для "ничего" в Питоне есть `None`. Не пустая строка и не -1, а именно `None`: |
49 | 44 |
|
50 | | - :::python |
51 | 45 | try: |
52 | 46 | latitude = float(input('Введите широту: ')) |
53 | 47 | except ValueError: |
|
63 | 57 | ###Меньше вложенности |
64 | 58 | Загрузим json из файла: |
65 | 59 |
|
66 | | - :::python |
67 | 60 | def load_json_data(filepath): |
68 | 61 | with open(filepath, 'r') as file_handler: |
69 | 62 | return json.load(file_handler) |
70 | 63 |
|
71 | 64 | Всё сломается, если передать путь до несуществующего файла. Исправим: |
72 | 65 |
|
73 | | - :::python |
74 | 66 | def load_json_data(filepath): |
75 | 67 | if os.path.exists(filepath): |
76 | 68 | with open(filepath, 'r') as file_handler: |
|
82 | 74 | функции смысла нет. |
83 | 75 | Избавляемся от `else`: |
84 | 76 |
|
85 | | - :::python |
86 | 77 | def load_json_data(filepath): |
87 | 78 | if os.path.exists(filepath): |
88 | 79 | with open(filepath, 'r') as file_handler: |
|
94 | 85 |
|
95 | 86 | Упростить можно так: |
96 | 87 |
|
97 | | - :::python |
98 | 88 | def load_json_data(filepath): |
99 | 89 | if not os.path.exists(filepath): |
100 | 90 | return None |
|
107 | 97 | Часто в коде приходится проверять переменные на нулевые значения. |
108 | 98 | Например, пустой список: |
109 | 99 |
|
110 | | - :::python |
111 | 100 | if len(users) == 0: |
112 | 101 | pass |
113 | 102 |
|
114 | 103 | Или пустая строка: |
115 | 104 |
|
116 | | - :::python |
117 | 105 | if user.email == '': |
118 | 106 | pass |
119 | 107 |
|
120 | 108 | Или ноль: |
121 | 109 |
|
122 | | - :::python |
123 | 110 | if user.level == 0: |
124 | 111 | pass |
125 | 112 |
|
126 | 113 | Все три примера выше – неверные. Вот их верные аналоги: |
127 | 114 |
|
128 | | - :::python |
129 | 115 | if not users: |
130 | 116 | pass |
131 | 117 |
|
|
177 | 163 |
|
178 | 164 | Понятным – это когда с первого взгляда понятно, что он делает: |
179 | 165 |
|
180 | | - :::python |
181 | 166 | credentials = load_oauth_credentials_from_file('fb_creds.json') |
182 | 167 | fb_api = get_facebook_api(credentials) |
183 | 168 | messages = fb_api.get_unread_messages() |
|
0 commit comments