>> def get_odds():
…·····for number in range(1, 10, 2):
…·········yield number
…
>>> for count, number in enumerate(get_odds(), 1):
…·····if count == 3:
…·········print("The third odd number is", number)
…·········break
…
Третье нечетное число равно 5.
10. Определите декоратор test, который выводит строку 'start', когда вызывается функция, и строку 'end', когда функция завершает свою работу:
>>> def test(func):
…·····def new_func(*args, **kwargs):
…·········print('start')
…·········result = func(*args, **kwargs)
…·········print('end')
…·········return result
…·····return new_func
…
>>>
>>> @test
… def greeting():
…·····print("Greetings, Earthling")
…
>>> greeting()
start
Greetings, Earthling
end
11. Определите исключение, которое называется OopsException. Сгенерируйте его, чтобы увидеть, что произойдет. Затем напишите код, позволяющий поймать это исключение и вывести строку 'Caught an oops':
>>> class OopsException(Exception):
…·····pass
…
>>> raise OopsException()
Traceback (most recent call last):
··File "", line 1, in
__main__.OopsException
>>>
>>> try:
…·····raise OopsException
… except OopsException:
…·····print('Caught an oops')
…
Caught an oops
12. Используйте функцию zip(), чтобы создать словарь movies, который объединяет в пары эти списки: titles = ['Creature of Habit', 'Crewel Fate'] и plots = ['A nun turns into a monster', 'A haunted yarn shop']:
>>> titles = ['Creature of Habit', 'Crewel Fate']
>>> plots = ['A nun turns into a monster', 'A haunted yarn shop']
>>> movies = dict(zip(titles, plots))
>>> movies
{'Crewel Fate': 'A haunted yarn shop', 'Creature of Habit': 'A nun turns into a monster'}
Глава 5. Py Boxes: модули, пакеты и программы
1. Создайте файл, который называется zoo.py. В этом файле объявите функцию hours(), которая выводит на экран строку 'Open 9–5 daily'. Далее используйте интерактивный интерпретатор, чтобы импортировать модуль zoo и вызвать его функцию hours().
Так выглядит файл zoo.py:
def hours():
····print('Open 9–5 daily')
А теперь импортируем его интерактивно:
>>> import zoo
>>> zoo.hours()
Open 9–5 daily
2. В интерактивном интерпретаторе импортируйте модуль zoo под именем menagerie и вызовите его функцию hours():
>>> import zoo as menagerie
>>> menagerie.hours()
Open 9–5 daily
3. Оставаясь в интерпретаторе, импортируйте непосредственно функцию hours() из модуля zoo и вызовите ее.
>>> from zoo import hours
>>> hours()
Open 9–5 daily
4. Импортируйте функцию hours() под именем info и вызовите ее:
>>> from zoo import hours as info
>>> info()
Open 9–5 daily
5. Создайте словарь с именем plain, содержащий пары «ключ — значение» 'a': 1, 'b': 2 и 'c':3, а затем выведите его на экран:
>>> plain = {'a': 1, 'b': 2, 'c': 3}
>>> plain
{'a': 1, 'c': 3, 'b': 2}
6. Создайте OrderedDict с именем fancy из пар «ключ — значение», приведенных в упражнении 5, и выведите его на экран. Изменился ли порядок ключей?
>>> from collections import OrderedDict
>>> fancy = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
>>> fancy
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
7. Создайте defaultdict с именем dict_of_lists и передайте ему аргумент list. Создайте список dict_of_lists['a'] и присоедините к нему значение 'something for a' за одну операцию. Выведите на экран dict_of_lists['a']:
>>> from collections import defaultdict
>>> dict_of_lists = defaultdict(list)
>>> dict_of_lists['a'].append('something for a')
>>> dict_of_lists['a']
['something for a']
Глава 6. Ой-ой-ой: объекты и классы
1. Создайте класс, который называется Thing, не имеющий содержимого, и выведите его на экран. Затем создайте объект example этого класса и также выведите его. Совпадают ли выведенные значения?
>>> class Thing:
…·····pass
…
>>> print(Thing)
>>> example = Thing()
>>> print(example)
<__main__.Thing object at 0x1006f3fd0>
2. Создайте новый класс с именем Thing2 и присвойте его атрибуту letters значение 'abc'. Выведите на экран значение атрибута letters:
>>> class Thing2:
…·····letters = 'abc'
…
>>> print(Thing2.letters)
abc
3. Создайте еще один класс, который, конечно же, называется Thing3. В этот раз присвойте значение 'xyz' атрибуту объекта, который называется letters. Выведите на экран значение атрибута letters. Понадобилось ли вам создавать объект класса, чтобы сделать это?
>>> class Thing3:
…·····def __init__(self):
…·········self.letters = 'xyz'
…
Переменная letters принадлежит любому объекту класса Thing3, но не самому классу Thing3:
>>> print(Thing3.letters)
Traceback (most recent call last):
··File "", line 1, in
AttributeError: type object 'Thing3' has no attribute 'letters'
>>> something = Thing3()
>>> print(something.letters)
xyz
4. Создайте класс, который называется Element, имеющий атрибуты объекта name, symbol и number. Создайте объект этого класса со значениями 'Hydrogen', 'H' и 1:
>>> class Element:
…·····def __init__(self, name, symbol, number):
…·········self.name = name
…·········self.symbol = symbol
…·········self.number = number
…
>>> hydrogen = Element('Hydrogen', 'H', 1)
5. Создайте словарь со следующими ключами и значениями: 'name': 'Hydrogen', 'symbol': 'H', 'number': 1. Далее создайте объект с именем hydrogen класса Element с помощью этого словаря.
Начнем со словаря:
>>> el_dict = {'name': 'Hydrogen', 'symbol': 'H', 'number': 1}
Это работает, однако необходимо напечатать много текста:
>>> hydrogen = Element(el_dict['name'], el_dict['symbol'], el_dict['number'])
Убедимся, что это работает:
>>> hydrogen.name
'Hydrogen'