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