Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Python 3.1.pdf
Скачиваний:
314
Добавлен:
05.06.2015
Размер:
1.94 Mб
Скачать

Учебник Python 3.1: Материал из Викиучебника.

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) {'sape': 4139,'jack': 4098,'guido': 4127}

В дополнение ко всему этому, для создания словарей из произвольных выражений для ключей и значений, могут быть использованы словарные сборки:

>>> {x: x**2 for x in (2, 4, 6)} {2: 4,4: 16,6: 36}

Позже в учебнике мы изучим выражения-генераторы (Generator Expressions), которые даже лучше подходят для снабжения конструктора dict() парами ключ-значение.

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

>>> dict(sape=4139, guido=4127, jack=4098)

{'sape': 4139, 'jack': 4098, 'guido': 4127}

Организация циклов

При организации перебора элементов из словаря ключ и соответствующее ему значение могут быть получены одновременно посредством метода items().

>>>knights = {'gallahad': 'the pure', 'robin': 'the brave'}

>>>for k, v in knights.items():

... print(k, v)

...

gallahad the pure robin the brave

Функция enumerate() поможет пронумеровать элементы перебираемой в цикле последовательности:

>>> for i, v in enumerate(['tic', 'tac', 'toe']):

... print(i, v)

...

0 tic

1 tac

2 toe

Для того, чтобы организовать цикл параллельно для двух или более последовательностей, элементы можно предварительно сгруппировать функцией zip()[36].

>>>questions = ['name', 'quest', 'favorite color']

>>>answers = ['lancelot', 'the holy grail', 'blue']

>>>for q, a in zip(questions, answers):

... print('What is your {0}? It is {1}.'.format(q, a))

...

What is your name? It is lancelot.

What is your quest? It is the holy grail. What is your favorite color? It is blue.

Изменить порядок следования последовательности на обратный поможет функция reversed().

>>> for i in reversed(range(1, 10, 2)):

... print(i)

...

9

7

5

3

1

39

Учебник Python 3.1: Материал из Викиучебника.

Для организации цикла по отсортированной последовательности можно применить функцию sorted(), которая возвращает отсортированный список, оставляя исходный без изменений.

>>>basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']

>>>for f in sorted(set(basket)):

... print(f)

...

apple banana orange

pear

Подробнее об условиях

Условия в операторах if и while могут содержать любые операции, а не только операции сравнения.

Операции сравнения in и not in проверяют, встречается значение в последовательности или нет. Операции is и is not проверяют, не являются ли два объекта на самом деле одним и тем же (это имеет смысл лишь для изменяемых объектов, таких как списки). Все операции сравнения имеют один и тот же приоритет, меньший чем у любых операций над числами.

Сравнения можно объединять в цепочки. Например, a < b == c проверяет, меньше ли a чем b и, сверх того, равны ли b и c.

Сравнения могут быть скомбинированы с использованием булевых операций and и or, а результат сравнения (или любого другого булева выражения) можно отрицать

используя not. Эти операции имеют меньший приоритет, чем у операций сравнения; среди них у not высший приоритет, а у or — низший, поэтому A and not B or C эквивалентно (A and (not B)) or C. Как всегда, явно заданные скобки помогут выразить желаемый порядок выполнения операций.

Булевы операции and и or — это так называемые коротящие операции[37] (short-circuit operators): их операнды вычисляются слева направо и вычисление заканчивается как только результат становится определён (очевиден). Например, если A и C истинны, а B — ложно, в условии A and B and C выражение C не вычисляется. Коротящая операциявозвращает последний элемент, который был вычислен, что может быть применено не только в целях задания логики.

Можно присвоить результат сравнения, или другого булева выражения, переменной. Например,

>>>string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'

>>>non_null = string1 or string2 or string3

>>>non_null

'Trondheim'

Заметьте, что в Python (в отличие от C) присваивание не может использоваться внутри выражений. Программисты на C могут возмутиться по этому поводу, но на самом деле это позволяет избежать ряда проблем, обычного для программ на C: указания оператора присваивания (=) в выражении, вместо предполагавшегося сравнения (==).

40