Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 [ 7 ] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145

>>> range(5, 10)

[5, 6, 7, 8, 9]

>>> range(0, 10, 3) [0, 3, 6, 9]

>>> range(-10, -100, -30) [-10, -40, -70]

Для того, чтобы перебрать индексы последовательности, используйте совместно range() и len() :

>>> a = [У, Марии, есть, маленькая, овечка] >>> for i in range(len(a)):

print i, a[i]

1 Марии

2 есть

3 маленькая

4 овечка

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

>>> l=range(10000000) Traceback (innermost last): File "<stdin>", line 1, in ?

MemoryError

Действительно, если мы не собираемся изменять список, достаточно создать псевдосписок - объект, для которого мы можем получить значения "элементов", но не можем изменить их или порядок их следования. Для этих целей в языке Python предусмотрена функция xrange() :

>>> xrange(5, 10)

(5, 6, 7, 8, 9)

>>> xrange(0, 10, 3)

(0, 3, 6, 9)

>>> xrange(-10, -100, -30) (-10, -40, -70)

>>> a = [У, Марии, есть, маленькая, овечка] >>> for i in xrange(len(a)):

print i, a[i]

1 Марии



4.4. Инструкции break и continue, ветвь else в циклах 39

2 есть

3 маленькая

4 овечка

4.4 Инструкции break и continue, ветвь else в циклах

Инструкция break, как и в C, выходит из самого внутреннего вложенного цикла for или while. Инструкция continue, также позаимствованная из C, продолжает выполнение цикла со следующей итерации.

Циклы могут иметь ветвь else, которая выполняется при "нормальном" выходе (исчерпание последовательности в цикле for, неудовлетворение условия в цикле while), без прерывания инструкцией break. Продемонстрируем ее использование на примере поиска простых чисел:

>>> for n in xrange(2, 10):

... for x in xrange(2, n): ... if n % x == 0:

... print n, =, x, n/x

... break

... else:

... print n, - простое число

2 - простое число

3 - простое число

4 = 2*2

5 - простое число

6 = 2*3

7 - простое число

8=2*4

9 = 3*3

4.5 Инструкция pass

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

>>> while 1:

... pass # Ожидание прерывания от клавиатуры



>>> # Теперь вызовем только что определенную функцию ... fib(2000)

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

Ключевое слово def представляет определение функции. После него должно следовать имя функции и, в скобках, список формальных параметров. Инструкции, образующие тело функции, записываются с отступом, начиная со следующей строки. Первой инструкцией тела функции может быть строка документации (см. раздел 4.7.5). Существуют средства для автоматического создания документации, а также средства, позволяющие пользователю просматривать строки документации в интерактивном режиме. Включение строк документации в код является хорошей традицией.

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

Аргументы функции в момент вызова помещаются в локальную таблицу имен вызываемой функции. Таким образом, аргументы передаются по значению (где значение всегда является ссылкой на объект, а не его значением)2. В случае вызова функции другой функцией, также создается новая локальная таблица имен для этого вызова.

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

>>> fib

<function object at 10042ed0>

2На самом деле, правильнее было бы сказать, что аргументы передаются по ссылке на объект: если передается объект, допускающий изменения, то изменения (например, добавление элементов в список) будут видны в том месте, откуда функция была вызвана.

4.6 Определение функций

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

>>> def fib(n):

... Выводит последовательность чисел Фибоначчи,

... не превышающих n

... a, b = 0, 1

... while b < n:

... print b,

... a, b = b, a+b



0 1 2 3 4 5 6 [ 7 ] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145