Skip to content

Commit 2a0d55c

Browse files
committed
Добавила статью про типы в питоне
1 parent 84da752 commit 2a0d55c

1 file changed

Lines changed: 103 additions & 0 deletions

File tree

1_python_basics/4_types.md

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
###Числа
2+
3+
В самом Питоне есть целые, вещественные, и комплексные числа. В стандартной библиотеке есть ещё рациональные и
4+
фиксированной точности.
5+
6+
У целых чисел нет подводных камней: у них нет ограничения по размеру, поддерживают стандартные арифметические действия
7+
и всякое такое.
8+
9+
У вещественных есть подвох: они внутри представлены как тип double в С++. Это значит, что хранятся они как два числа:
10+
мантисса и экспонента. Это удобно, но иногда из-за ошибок округления и накапливаемых погрешностей происходят ужасные вещи.
11+
Чтобы знать, что и как может сломаться, надо прочитать
12+
[статью про ограничение вещественных числах в документации](https://docs.python.org/3.5/tutorial/floatingpoint.html)
13+
(*мастрид*).
14+
15+
Частный, но важный случай: деньги нельзя хранить как вещественное число, только как целое или с фиксированной точностью.
16+
Это кажется очевидным, но многие так делают (некоторые даже в бою). Их всех потом увольняют. Едва ли это совпадение.
17+
18+
[Официальная заметка про численные типы](https://docs.python.org/3.5/library/stdtypes.html#numeric-types-int-float-complex)
19+
короткая и понятная.
20+
21+
22+
###Строки
23+
24+
Со строками в третьем Питоне всё просто: они Юникодные.
25+
26+
Это значит, что всё сделано очень удобно, но чтобы этим всем удобно пользоваться, надо знать, что такое Юникод, кодировки,
27+
байты, вот это всё. Об этом можно узнать, например, из [классного доклада про Юникод в Питоне](https://www.youtube.com/watch?v=sgHbC6udIqc).
28+
29+
Ещё строки можно форматировать, причём несколькими способами. Вот один из них:
30+
31+
:::python
32+
name = 'Пётр'
33+
height = 1.865
34+
print('Привет, %s! Твой рост – %.2f м.' % (name, height))
35+
# Привет, Пётр! Твой рост – 1.86 м.
36+
37+
Заметь, что `%s` значит "вывести строку как есть", а `%.2f` значит "вывести вещественное число
38+
с точностью до третьего знака". На самом деле, есть целый подъязык этого форматирования. Почитай
39+
[про него в документации](https://docs.python.org/3.1/library/string.html#format-specification-mini-language)
40+
и [более подробную статью](https://pyformat.info/).
41+
42+
И главное: никогда не используй сложение строк для форматирования. Это плохо читается, долго работает и занимает
43+
много места.
44+
45+
46+
###Списки
47+
48+
Всё необходимое для начала работы со списками, есть в разделе ["Основные типы данных"](http://devman.org/encyclopedia/python_basics/python_basics_base_types/).
49+
50+
Тут давайте немного поговорим о list comprehension (по-русски они зовутся списковыми выражениями, но я ни разу не слышал,
51+
чтобы кто-то так говорил).
52+
53+
Часто бывает надо взять исходный список и сформировать из него новый, применив к каждому элементу исходного
54+
какое-то преобразование и как-то отфильтровав. Например, так:
55+
56+
:::python
57+
values = [1, 2, 3, 4, 5]
58+
new_values = []
59+
for value in values:
60+
if value % 2:
61+
new_values.append(value ** 2)
62+
63+
В результате в `new_values` будут только квадраты чётных чисел из исходного списка.
64+
65+
Эта операция настолько частая, что для неё есть отдельная конструкция – list comprehension. Выглядит она так:
66+
67+
:::python
68+
values = [1, 2, 3, 4, 5]
69+
new_values = [value ** 2 for value in values if value % 2]
70+
71+
Это та же конструкция, что и в предыдущем примере, просто записанная очень компактно: посредине тот же цикл,
72+
слева – что добавлять в новый список, а справа - фильтр. Фильтр может быть необязательным, кстати.
73+
74+
###Словари
75+
76+
Словарь – это отображение одних элементов в другие. Первые называют ключами, вторые – значениями.
77+
78+
:::python
79+
user_info = {'name': 'Иван', 'level': 2}
80+
print(user_info['name']) # Иван
81+
82+
83+
Из словаря можно удалять, менять и добавлять в него элементы:
84+
85+
:::python
86+
user_info = {'name': 'Иван', 'level': 2}
87+
user_info['middle_name'] = 'Иванович'
88+
user_info['name'] = 'Грирогий'
89+
del user_info['level']
90+
print(user_info) # {'middle_name': 'Иванович', 'name': 'Грирогий'}
91+
92+
Важный момент про словари: они хранят только отображение одних элементов в других, а порядок элементов не хранят.
93+
В примере выше `middle_name` был выведен первым, но на это полагаться нельзя.
94+
95+
Ещё у словарей есть несколько важных методов: `keys`, `values` и `items`. Первый возвращает список только ключей,
96+
второй – список только значений, третий – список пар из ключей и значений. Удобно при итерации по словарю:
97+
98+
:::python
99+
user_info = {'name': 'Иван', 'level': 2}
100+
for key, value in user_info.items():
101+
print '%s: %s' % (key, value)
102+
# name: Иван
103+
# level: 2

0 commit comments

Comments
 (0)