Главная страница

Самоучитель PythonВыпуск 2Дмитрий Мусинмая 07, 2017


Скачать 0.74 Mb.
НазваниеСамоучитель PythonВыпуск 2Дмитрий Мусинмая 07, 2017
Дата20.01.2019
Размер0.74 Mb.
Формат файлаpdf
Имя файлаPython3.pdf
ТипПрограмма
#64480
страница5 из 12
1   2   3   4   5   6   7   8   9   ...   12
Методы словарей
dict.clear() - очищает словарь.
dict.copy() - возвращает копию словаря.
classmethod dict.fromkeys(seq[, value]) - создает словарь с ключами из seq и значением value (по умолчанию None).
dict.get(key[, default]) - возвращает значение ключа, но если его нет, не бросает исключе- ние, а возвращает default (по умолчанию None).
dict.items() - возвращает пары (ключ, значение).
dict.keys() - возвращает ключи в словаре.
dict.pop(key[, default]) - удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение).
17.1. Методы словарей
58

Самоучитель Python, Выпуск 0.2
dict.popitem() - удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError. Помните, что словари неупорядочены.
dict.setdefault(key[, default]) - возвращает значение ключа, но если его нет, не бросает ис- ключение, а создает ключ с значением default (по умолчанию None).
dict.update([other]) - обновляет словарь, добавляя пары (ключ, значение) из other. Суще- ствующие ключи перезаписываются. Возвращает None (не новый словарь!).
dict.values() - возвращает значения в словаре.
17.1. Методы словарей
59

Глава
18
Множества (set и frozenset)
Доброго времени суток! Сегодня я расскажу о работе с множествами в python, операциях над ними и покажу примеры их применения.
Что такое множество?
Множество в python - “контейнер”, содержащий не повторяющиеся элементы в случай- ном порядке.
Создаём множества:
>>>
a
=
set
()
>>>
a set()
>>>
a
=
set
(
'hello'
)
>>>
a
{'h', 'o', 'l', 'e'}
>>>
a
=
{
'a'
,
'b'
,
'c'
,
'd'
}
>>>
a
{'b', 'c', 'a', 'd'}
>>>
a
=
{i
**
2
for i
in range
(
10
)}
# генератор множеств
>>>
a
{0, 1, 4, 81, 64, 9, 16, 49, 25, 36}
>>>
a
=
{}
# А так нельзя!
>>>
type
(a)

Как видно из примера, множества имеет тот же литерал, что и словарь
, но пустое множе- ство с помощью литерала создать нельзя.
60

Самоучитель Python, Выпуск 0.2
Множества удобно использовать для удаления повторяющихся элементов:
>>>
words
=
[
'hello'
,
'daddy'
,
'hello'
,
'mum'
]
>>>
set
(words)
{'hello', 'daddy', 'mum'}
С множествами можно выполнять множество операций: находить объединение, пересе- чение...
• len(s) - число элементов в множестве (размер множества).
• x in s - принадлежит ли x множеству s.
set.isdisjoint(other) - истина, если set и other не имеют общих элементов.
set == other - все элементы set принадлежат other, все элементы other принадлежат set.
set.issubset(other) или set <= other - все элементы set принадлежат other.
set.issuperset(other) или set >= other - аналогично.
set.union(other, ...) или set | other | ... - объединение нескольких множеств.
set.intersection(other, ...) или set & other & ... - пересечение.
set.difference(other, ...) или set - other - ... - множество из всех элементов set, не при- надлежащие ни одному из other.
set.symmetric_difference(other); set ^ other - множество из элементов, встречающих- ся в одном множестве, но не встречающиеся в обоих.
set.copy() - копия множества.
И операции, непосредственно изменяющие множество:
set.update(other, ...); set |= other | ... - объединение.
set.intersection_update(other, ...); set &= other & ... - пересечение.
set.difference_update(other, ...); set -= other | ... - вычитание.
set.symmetric_difference_update(other); set ^= other - множество из элементов, встре- чающихся в одном множестве, но не встречающиеся в обоих.
set.add(elem) - добавляет элемент в множество.
set.remove(elem) - удаляет элемент из множества. KeyError, если такого элемента не существует.
set.discard(elem) - удаляет элемент, если он находится в множестве.
set.pop() - удаляет первый элемент из множества. Так как множества не упорядоче- ны, нельзя точно сказать, какой элемент будет первым.
set.clear() - очистка множества.
18.1. Что такое множество?
61

Самоучитель Python, Выпуск 0.2
frozenset
Единственное отличие set от frozenset заключается в том, что set - изменяемый тип дан- ных, а frozenset - нет. Примерно похожая ситуация с списками и
кортежами
>>>
a
=
set
(
'qwerty'
)
>>>
b
=
frozenset
(
'qwerty'
)
>>>
a
==
b
True
>>>
True
True
>>>
type
(a
- b)

>>>
type
(a
|
b)

>>>
a add(
1
)
>>>
b add(
1
)
Traceback (most recent call last):
File
""
, line
1
, in
AttributeError
: 'frozenset' object has no attribute 'add'
18.2. frozenset
62

Глава
19
Функции и их аргументы
В этой статье я планирую рассказать о функциях, именных и анонимных, инструкциях def, return и lambda, обязательных и необязательных аргументах функции, функциях с произвольным числом аргументов.
Именные функции, инструкция def
Функция в python - объект, принимающий аргументы и возвращающий значение. Обыч- но функция определяется с помощью инструкции def.
Определим простейшую функцию:
def add
(x, y):
return x
+
y
Инструкция return говорит, что нужно вернуть значение. В нашем случае функция воз- вращает сумму x и y.
Теперь мы ее можем вызвать:
>>>
add(
1
,
10
)
11
>>>
add(
'abc'
,
'def'
)
'abcdef'
Функция может быть любой сложности и возвращать любые объекты (списки, кортежи,
и даже функции!):
>>>
def newfunc
(n):
def myfunc
(x):
63

Самоучитель Python, Выпуск 0.2
return x
+
n return myfunc
>>>
new
=
newfunc(
100
)
# new - это функция
>>>
new(
200
)
300
Функция может и не заканчиваться инструкцией return, при этом функция вернет зна- чение
None
:
>>>
def func
():
pass
>>>
print
(func())
None
Аргументы функции
Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произвольным числом аргументов, функции с позиционными и именованными аргументами, обязательными и необязательными.
>>>
def func
(a, b, c
=
2
):
# c - необязательный аргумент return a
+
b
+
c
>>>
func(
1
,
2
)
# a = 1, b = 2, c = 2 (по умолчанию)
5
>>>
func(
1
,
2
,
3
)
# a = 1, b = 2, c = 3 6
>>>
func(a
=
1
, b
=
3
)
# a = 1, b = 3, c = 2 6
>>>
func(a
=
3
, c
=
6
)
# a = 3, c = 6, b не определен
Traceback (most recent call last):
File "", line 1, in func(a=3, c=6)
TypeError
: func() takes at least 2 arguments (2 given)
Функция также может принимать переменное количество позиционных аргументов, то- гда перед именем ставится *:
>>>
def func
(
*
args):
return args
>>>
func(
1
,
2
,
3
,
'abc'
)
(1, 2, 3, 'abc')
>>>
func()
()
>>>
func(
1
)
19.2. Аргументы функции
64

Самоучитель Python, Выпуск 0.2
(1,)
Как видно из примера, args - это кортеж из всех переданных аргументов функции, и с переменной можно работать также, как и с кортежем.
Функция может принимать и произвольное число именованных аргументов, тогда перед именем ставится **:
>>>
def func
(
**
kwargs):
return kwargs
>>>
func(a
=
1
, b
=
2
, c
=
3
)
{'a': 1, 'c': 3, 'b': 2}
>>>
func()
{}
>>>
func(a
=
'python'
)
{'a': 'python'}
В переменной kwargs у нас хранится словарь
, с которым мы, опять-таки, можем делать все, что нам заблагорассудится.
Анонимные функции, инструкция lambda
Анонимные функции могут содержать лишь одно выражение, но и выполняются они быстрее. Анонимные функции создаются с помощью инструкции lambda. Кроме этого,
их не обязательно присваивать переменной, как делали мы инструкцией def func():
>>>
func
=
lambda x, y: x
+
y
>>>
func(
1
,
2
)
3
>>>
func(
'a'
,
'b'
)
'ab'
>>>
(
lambda x, y: x
+
y)(
1
,
2
)
3
>>>
(
lambda x, y: x
+
y)(
'a'
,
'b'
)
'ab'
lambda функции, в отличие от обычной, не требуется инструкция return, а в остальном,
ведет себя точно так же:
>>>
func
=
lambda
*
args: args
>>>
func(
1
,
2
,
3
,
4
)
(1, 2, 3, 4)
19.3. Анонимные функции, инструкция lambda
65

Глава
20
Исключения в python. Конструкция try - except для обработки исключений
Исключения (exceptions) - ещё один тип данных в python. Исключения необходимы для того, чтобы сообщать программисту об ошибках.
Самый простейший пример исключения - деление на ноль:
>>>
100
/
0
Traceback (most recent call last):
File "", line 1, in
100 / 0
ZeroDivisionError
: division by zero
В данном случае интерпретатор сообщил нам об исключении ZeroDivisionError, то есть делении на ноль. Также возможны и другие исключения:
>>>
2
+
'1'
Traceback (most recent call last):
File "", line 1, in
2 + '1'
TypeError
: unsupported operand type(s) for +: 'int' and 'str'
>>>
int
(
'qwerty'
)
Traceback (most recent call last):
File "", line 1, in int('qwerty')
ValueError
: invalid literal for int() with base 10: 'qwerty'
В этих двух примерах генерируются исключения TypeError и ValueError соответственно.
Подсказки дают нам полную информацию о том, где порождено исключение, и с чем оно связано.
66

Самоучитель Python, Выпуск 0.2
Рассмотрим иерархию встроенных в python исключений, хотя иногда вам могут встре- титься и другие, так как программисты могут создавать собственные исключения. Дан- ный список актуален для python 3.3
, в более ранних версиях есть незначительные изме- нения.
BaseException - базовое исключение, от которого берут начало все остальные.
– SystemExit - исключение, порождаемое функцией sys.exit при выходе из про- граммы.
– KeyboardInterrupt - порождается при прерывании программы пользователем
(обычно сочетанием клавиш Ctrl+C).
– GeneratorExit - порождается при вызове метода close объекта generator.
– Exception - а вот тут уже заканчиваются полностью системные исключения (ко- торые лучше не трогать) и начинаются обыкновенные, с которыми можно рабо- тать.
* StopIteration - порождается встроенной функцией next, если в итераторе больше нет элементов.
* ArithmeticError - арифметическая ошибка.
· FloatingPointError - порождается при неудачном выполнении операции с плавающей запятой. На практике встречается нечасто.
· OverflowError - возникает, когда результат арифметической операции слишком велик для представления. Не появляется при обычной работе с целыми числами (так как python поддерживает длинные числа), но мо- жет возникать в некоторых других случаях.
· ZeroDivisionError - деление на ноль.
* AssertionError - выражение в функции assert ложно.
* AttributeError - объект не имеет данного атрибута (значения или метода).
* BufferError - операция, связанная с буфером, не может быть выполнена.
* EOFError - функция наткнулась на конец файла и не смогла прочитать то,
что хотела.
* ImportError - не удалось импортирование модуля или его атрибута.
* LookupError - некорректный индекс или ключ.
· IndexError - индекс не входит в диапазон элементов.
· KeyError - несуществующий ключ (в
словаре
,
множестве или другом объекте).
* MemoryError - недостаточно памяти.
* NameError - не найдено переменной с таким именем.
· UnboundLocalError - сделана ссылка на локальную переменную в
функции, но переменная не определена ранее.
67

Самоучитель Python, Выпуск 0.2
* OSError - ошибка, связанная с системой.
· BlockingIOError
· ChildProcessError - неудача при операции с дочерним процессом.
· ConnectionError - базовый класс для исключений, связанных с подклю- чениями.
· BrokenPipeError
· ConnectionAbortedError
· ConnectionRefusedError
· ConnectionResetError
· FileExistsError - попытка создания файла или директории, которая уже существует.
· FileNotFoundError - файл или директория не существует.
· InterruptedError - системный вызов прерван входящим сигналом.
· IsADirectoryError - ожидался файл, но это директория.
· NotADirectoryError - ожидалась директория, но это файл.
· PermissionError - не хватает прав доступа.
· ProcessLookupError - указанного процесса не существует.
· TimeoutError - закончилось время ожидания.
* ReferenceError - попытка доступа к атрибуту со слабой ссылкой.
* RuntimeError - возникает, когда исключение не попадает ни под одну из дру- гих категорий.
* NotImplementedError - возникает, когда абстрактные методы класса требу- ют переопределения в дочерних классах.
* SyntaxError - синтаксическая ошибка.
· IndentationError - неправильные отступы.
· TabError - смешивание в отступах табуляции и пробелов.
* SystemError - внутренняя ошибка.
* TypeError - операция применена к объекту несоответствующего типа.
* ValueError - функция получает аргумент правильного типа, но некорректно- го значения.
* UnicodeError - ошибка, связанная с кодированием / раскодированием unicode в строках
· UnicodeEncodeError - исключение, связанное с кодированием unicode.
· UnicodeDecodeError
- исключение,
связанное с
декодированием unicode.
68

Самоучитель Python, Выпуск 0.2
· UnicodeTranslateError - исключение, связанное с переводом unicode.
* Warning - предупреждение.
Теперь, зная, когда и при каких обстоятельствах могут возникнуть исключения, мы мо- жем их обрабатывать. Для обработки исключений используется конструкция try - except.
Первый пример применения этой конструкции:
>>>
try
:
k
=
1
/
0
except ZeroDivisionError
:
k
=
0
>>>
print
(k)
0
В блоке try мы выполняем инструкцию, которая может породить исключение, а в бло- ке except мы перехватываем их. При этом перехватываются как само исключение,
так и его потомки. Например, перехватывая ArithmeticError, мы также перехватываем
FloatingPointError, OverflowError и ZeroDivisionError.
>>>
try
:
k
=
1
/
0
except ArithmeticError
:
k
=
0
>>>
print
(k)
0
Также возможна инструкция except без аргументов, которая перехватывает вообще всё (и прерывание с клавиатуры, и системный выход и т. д.). Поэтому в такой форме инструк- ция except практически не используется, а используется except Exception. Однако чаще всего перехватывают исключения по одному, для упрощения отладки (вдруг вы ещё дру- гую ошибку сделаете, а except её перехватит).
Ещё две инструкции, относящиеся к нашей проблеме, это finally и else. Finally выполняет блок инструкций в любом случае, было ли исключение, или нет (применима, когда нуж- но непременно что-то сделать, к примеру, закрыть файл). Инструкция else выполняется в том случае, если исключения не было.
>>>
f
=
open
(
'1.txt'
)
>>>
ints
=
[]
>>>
try
:
for line in f:
ints append(
int
(line))
except ValueError
:
print
(
'Это не число. Выходим.'
)
except Exception
:
print
(
'Это что ещё такое?'
)
else
:
print
(
'Всё хорошо.'
)
finally
:
69

Самоучитель Python, Выпуск 0.2
f close()
print
(
'Я закрыл файл.'
)
# Именно в таком порядке: try, группа except, затем else, и только потом
˓→
finally.
Это не число. Выходим.
Я закрыл файл.
70

Глава
21
Байты (bytes и bytearray)
Байтовые строки в Python - что это такое и с чем это едят? Байтовые строки очень похожи на обычные строки
, но с некоторыми отличиями. Попробуем выяснить, с какими.
Что такое байты? Байт - минимальная единица хранения и обработки цифровой инфор- мации. Последовательность байт представляет собой какую-либо информацию (текст,
картинку, мелодию...).
Создаём байтовую строку:
>>>
b'bytes'
b'bytes'
>>>
'Байты'
encode(
'utf-8'
)
b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b'
>>>
bytes
(
'bytes'
, encoding
=
'utf-8'
)
b'bytes'
>>>
bytes
([
50
,
100
,
76
,
72
,
41
])
b'2dLH)'
Если первые три способа нам уже известны (
тут
,
тут и
тут
), то последний нужно пояснить.
Функция bytes принимает список чисел от 0 до 255 и возвращает байты, получающиеся применением функции chr.
>>>
chr
(
50
)
'2'
>>>
chr
(
100
)
'd'
>>>
chr
(
76
)
'L'
Что делать с байтами? Хотя байтовые строки поддерживают практически все строковые методы, с ними мало что нужно делать. Обычно их надо записать в файл
/ прочесть из
71

Самоучитель Python, Выпуск 0.2
файла и преобразовать во что-либо другое (конечно, если очень хочется, то можно и рас- печатать). Для преобразования в строку используется метод decode:
>>>
b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b'
decode(
'utf-8'
)
'Байты'
1   2   3   4   5   6   7   8   9   ...   12


написать администратору сайта