Python с нуля – часть 2: типы переменных

 

PythonВ первой части мы рассмотрели общий синтаксис языка Python.

В этой – рассмотрим основные типы переменных: (variables), строки (strings), списки (lists), кортежи (tuples) и словари (dictionaries).

Переменные – не что иное, как просто зарезервированное в памяти место для хранения каких-то данных. Это значит, что когда вы создаёте переменную – вы резервируете какое-то место в памяти.

В зависимости от типа переменной, интерпретатор выделяет память и определяет, что именно в этом участке памяти хранить. Поэтому, указывая различные типы переменных вы можете хранить в них целые числа (integers), дроби (decimals) или обычные текстовые символы (characters).

Присваивание значений переменным

Переменные в Python не нуждаются в обязательном их объявлении для выделения им памяти. Объявление (присваивание, назначение и т.п.) переменной и выделение памяти для хранения её значения выполняется в тот момент, когда вы задаёте какие-то данные (присваиваете значение) этой переменной. Для этого используется символ равенства (=).

Операнд с левой стороны знака равенства, который в данном случае является оператором, указывает имя переменной, а операнд с правой стороны – значение, которое будет хранится в этой переменной. Например:

>>> counter = 100          # целое число (integer);
>>> miles   = 1000.0       # числ ос плавающей точкой (floating);
>>> name    = "John"       # строка (string);
>>> print counter
100
>>> print miles
1000.0
>>> print name
John

Тут 100, 1000.0 и “John” – это значения, присвоенные переменным counter, miles и name соответственно.

Множественное присваивание

Python позволяет выполнять операцию множественного присваивания, когда одно и тоже значение задаётся сразу нескольким переменным одновременно.  Например:

>>> a = b = c = 1

В этом примере создаётся целочисленный объект со значением 1, и все три переменные назначаются к одному и тому же блоку в памяти.

Вы так же можете выполнять множественное присваивание разных значений разным переменным. Например:

>>> a, b, c = 1, 2, "john"

Тут два целочисленных объекта со значениями 1 и 2 присваиваются переменным с именами a и b, и одно строковое значение “john” присваивается переменной c:

>>> print a, b, c
1 2 john

Стандартные типы данных

Данные, хранимые в памяти мог быть нескольких типов. Например, возраст человека хранится в численном виде, а его(её) адрес – в буквенно-цифровом. У Python-а есть различные стандартные типы, по которым определяются допустимые операции над ними и методы хранения для каждого из них

В Python имеется пять таких стандартных типов:

  • числа (numbers);
  • строки (string);
  • списки (list);
  • кортежи (tuple);
  • словари (dictionary).

Числа в Python

Числовые данные (numeric data) содержат цифровые значения.

Числовые объекты создаются когда вы назначаете им данные, например:

>>> var1 = 1
>>> var2 = 10

Вы можете удалить ссылку на такой объект с помощью оператора del:

del var1[,var2[,var3[....,varN]]]]

Удалять можно как одиночный объект (переменную), так и несколько сразу, например:

>>> var1 = 1
>>> print var1
1
>>> del var1
>>> print var1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'var1' is not defined
>>> var1, var2, var3 = 1, 2, 3
>>> print var1, var2, var3
1 2 3
>>> del var1, var2, var3
>>> print var1, var2, var3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'var1' is not defined

Python поддерживает четыре различных числовых типа данных:

  • int  – целые числа (integers);
  • long – большие целые числа, так же можно использоваться для восьмеричных (octal) или десятеричных (hexadecimal) чисел;
  • float – числа с плавающей точкой;
  • complex – комплексные числа.

Примеры

Ниже приведены несколько примеров чисел в различных типах:

int long float complex
10 51924361L 0.0 3.14j
100 -0x19323L 15.20 45.j
-786 0122L -21.9 9.322e-36j
080 0xDEFABCECBDAECBFBAEl 32.3+e18 .876j
-0490 535633629843L -90. -.6545+0J
-0x260 -052318172735L -32.54e100 3e+26J
0x69 -4721885298529L 70.2-E12 4.53e-7j
  • В Python допустимо использовать букву l для обозначения типа long, но рекомендуется использовать только прописную L, что бы избежать возможной путаницы с цифрой 1.
  • A complex number consists of an ordered pair of real floating-point numbers denoted by a + bj, where a is the real part and b is the imaginary part of the complex number.

Строки в Python

Строки (strings) в Python представляют из себя набор символов, заключённый в одинарные (' ') или двойные (" ") кавычки. Определённые группы из списка могут быть получены с помощью операторов [ ] или [ : ], с указанием индекса, который всегда начинается с 0 и заканчивается индексом -1.

Знак ( + ) является оператором конкатенации (объединения), а символ ( * ) – оператором повторения. Например:

>>> str = 'Hello World!'
>>> print str
Hello World! # напечатать всю строку;
>>> print str[0] # напечатать только первый символ строки;
H
>>> print str[2:5]
llo # напечатать символы с 3-го по 5-ый;
>>> print str[2:]
llo World! # напечатать символы начиная с 3-го и до конца строки;
>>> print str * 2
Hello World!Hello World! # напечатать строку два раза;
>>> print str + "TEST"
Hello World!TEST # напечатать конкатенирующую (объединенную) строку.

Списки в Python

Списки (lists) являются наиболее универсальными из всех типов данных в Python. Список содержит элементы, разделённые запятыми и  ограниченные квадратными скобками ( [ ] ). В некотором роде списки подобны массивам в C. Разница между ними заключается в том, что элементы, принадлежащие одному списку, могут относится к разным типам данных. Значения

Получить доступ к элементам списка можно с использованием операторов [ ] или [ : ] с указанием индекса, который начинается 0 и заканчивается -1. Как и в строках – знак ( + ) обозначает конкатенацию элементов, а символ ( * ) – его повторение. Например:

>>> list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
>>> tinylist = [123, 'john']
>>> print list
['abcd', 786, 2.23, 'john', 70.2] # напечатать полный список;
>>> print list[0] # вывести первый элемент списка;
abcd
>>> print list[1:3]
[786, 2.23] # вывести элементы, начиная со 2-го и заканчивая 3-им;
>>> print list[2:]
[2.23, 'john', 70.2] # вывести элементы списка начиная со 2-го и до конца;
>>> print tinylist * 2
[123, 'john', 123, 'john'] # вывести все элементы списка два раза;
>>> print list + tinylist
['abcd', 786, 2.23, 'john', 70.2, 123, 'john'] # вывести объединённые списки.

Кортежи в Python

Кортежи (tuples)- ещё один тип данных в Python, схожий со списками и содержит в себе элементы, разделённые запятыми. В отличии от списков – элементы в кортеже ограничиваются круглыми скобками ( ).

Основное различие между списками (lists) и кортежами (tuples): списки ограничиваются квадратными скобками ( [ ] ) и их элементы и размер могут изменены, тогда как кортежи ограничиваются круглыми скобками ( ( ) ) и не могут быть изменены. Кортежи можно представлять себе как списки, но в read-only “режиме”. Например:

>>> tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
>>> tinytuple = (123, 'john')
>>> print tuple
('abcd', 786, 2.23, 'john', 70.2) # вывести все элементы кортежа;
>>> print tuple[0]
abcd # вывести первый элемент кортежа;
>>> print tuple[1:3]
(786, 2.23) # вывести второй и третий элементы;
>>> print tuple[2:]
(2.23, 'john', 70.2) # выввести все элементы, начиная с третьего;
>>> print tinytuple * 2
(123, 'john', 123, 'john') # вывести все элементы два раза;
>>> print tuple[1:3] * 2
(786, 2.23, 786, 2.23) # вывести второй и третий элементы два раза;
>>> print tuple + tinytuple
('abcd', 786, 2.23, 'john', 70.2, 123, 'john') # вывести объединённые элементы кортежей;

Следующий пример не сработает с кортежем, так как мы попытаемся изменить данные в нём, но – сработает со списком:

t>>> tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
>>> list = [ 'abcd', 786 , 2.23, 'john', 70.2  ]
>>> tuple[2] = 1000
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment # сообщение об ошибке - кортеж не поддерживает переназначение элемента;
>>> list[2] = 1000
>>> print list[2]
1000 # но это работает с элементом списка.

Словари в Python

Словари (dictionaries) в Python являются своего рода хеш-таблицами. Они  так же подобны ассоциативным массивам и хешам в Perl, и содержат пары ключ:значение. Ключ в словаре может содержать любой тип данных, используемый в Python, но, как правило, это цифры или строки. Значения же могут быть любыми случайными элементами.

Словари заключаются в фигурные скобки ( { } ), а доступ к значениями элементов осуществляется с помощью квадратных скобок ( [] ). Например:

>>> dict = {}
>>> dict['one'] = "This is one"
>>> dict[2]     = "This is two"
>>> tinydict = {'name': 'john','code':6734, 'dept': 'sales'}
>>> print dict['one']
This is one # вывести значение ключа one;
>>> print dict[2]
This is two # вывести значение ключа "2";
>>> print tinydict
{'dept': 'sales', 'code': 6734, 'name': 'john'} # отобразить полное содержимое словаря;
>>> print tinydict.keys()
['dept', 'code', 'name'] # вывести все ключи словаря;
>>> print tinydict.values()
['sales', 6734, 'john'] # вывести все значения в словаре.

В словарях нет общего соглашения о последовательности элементов, но неверно говорить что “элементы не отсортированы” – они попросту не упорядочены (тавтология получается, в оригинале это звучит как “It is incorrect to say that the elements are “out of order”; they are simply unordered“).

Преобразование различных типов данных

Иногда может возникнуть необходимость в преобразовании данных между различными встроенными типами. Для этого – можно просто использовать тип данных как функцию.

В Python есть несколько встроенных функций для выполнения таких преобразований. Эти функции возвращают новый объект, представляющий собой преобразованное значение.

Function Description
int(x [,base]) преобразовать х в целое; base указывает тип данных, если х – строка (см. примечание ниже);
long(x [,base] ) преобразовать в long integer, base указывает тип данных, если х – строка;
float(x) преобразовать х в число с плавающей точкой (floating-point number);
complex(real [,imag]) создать комплексное число;
str(x) преобразовать объект х в строковый вид;
repr(x) преобразовать объект х в выражение;
eval(str) Evaluates a string and returns an object.
tuple(s) преобразовать s в кортеж;
list(s) преобразовать s в список;
set(s) преобразовать s в set.
dict(d) создать словарь; d должен представлять собой пару ключ:значение;
frozenset(s) преобразовать s в frozen set.
chr(x) преобразовать целое число в символ;
unichr(x) преобразовать целое число в Unicode-символ;
ord(x) преобразовать единичный символ в его числовое значение;
hex(x) преобразовать целое число в шестнадцатеричное число;
oct(x) преобразовать целое число в восьмеричное число.

Примечание к функции int(x [,base]):

допустимые типы base (основание системы счисления) – от 0 (десятеричная) до 16;

перевести строку с шестнадцатеричным числом в десятичное цифровое значение – тут base=0, т.е. десятеричное:

>>> print int("0xdeadbeef", 0)
3735928559

перевести строку с десятеричным числом в десятичное цифровое значение;

>>> print int("101", 0)
101

перевести строку с двоичным числом в десятеричное значение:

>>> print int("1100101",2)
101

перевести строку с шестнадцатеричным значением в десятичное:

>>> print int("65",16)
101