| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
Глава 4. Операторы управления Кроме только что введенного оператора 4.1 Оператор Возможно, самым известным из операторов управления является оператор >>> if x<0: ... x=0 ... print ‘Отрицательное заменено нулем’ ... elif x==0: ... print ‘Нуль’ ... elif x==1: ... print ‘Один’ ... else: ... print ‘Больше’ ... Ветка 4.2 Оператор Оператор >>> # Мера нескольких строк: ... a=[‘cat’,’window’,’defenestrate’] >>> for x in a: ... print x, len(x) ... cat 3 window 6 defenestrate 12 >>> Небезопасно будет модифицировать итерируемую последовательность в теле цикла (что, в принципе, можно проделать с матируемыми последовательными типами, например, строками). Если Вам все же необходимо модифицировать итерируемый список, например, продублировать некоторые элементы, то Вам следует итерировать копию списка. Кусочная нотация делает это особенно удобно: >>> for x in a[:]: # делает кусочную копию всего списка ... if len(x)>6: a.insert(0,x) ... >>> a [’defenestrate’,’cat’,’window’,’defenestrate’] >>> 4.3 Функция Если Вам необходимо итерировать последовательность чисел, то встроенная функция >>> range(10) [0,1,2,3,4,5,6,7,8,9] >>> Переданный конечный элемент никогда не включается в сгенерированный список; >>> range (5,10) [5,6,7,8,9] >>> range (0,10,3) [0,3,6,9] >>> range (-10,-100,-30) [-10,-40,-70] >>> Чтобы итерировать индексы последовательности, комбинируйте >>> a=[‘У’,’Мэри’,’есть’,’маленький’,’ягненок’] >>> for i in range(len(a)): ... print i,a[i] ... 0 У 1 Мэри 2 есть 3 маленький 4 ягненок >>> 4.4 Операторы Оператор Оператор Операторы цикла могут иметь пункт >>> for n in range(2,10): ... for x in range(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 ничего не делает. Его нужно использовать когда синтаксически требуется оператор, но программа ничего не должна делать. Например: >>> while 1: ... pass # Ожидание прерывания от клавиатуры ... 4.6 Определение функций Мы можем создать функцию, которая будет выводить последовательность чисел Фибоначчи с произвольной границей: >>> def fib(n): # пишет числа Фибоначчи до n ... a,b=0,1 ... while b<n: ... print b ... a,b=b,a+b ... >>> # Теперь вызов только что определенной функции: ... fib(2000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 >>> Ключевое слово Выполнение функции вводит новую таблицу символов, используемую для локальных переменных функции. Иначе говоря, все присваивания в теле функции осуществляются для переменных в локальной таблице символов. При ссылке на переменную, они сперва ищутся в локальной таблице символов, затем в глобальной таблице символов и в последнюю очередь, в таблице встроенных имен. Так, глобальным переменным нельзя прямо присвоить значение внутри функции (не упомянув их перед этим в операторе Определение функции вводит имя этой функции в текущую таблицу символов. Значение имени функции имеет тип, распознаваемый интерпретатором как определенная пользователем функция. Это значение может быть присвоено другому имени, которое затем также можно использовать как функцию. Это служит как основной механизм переименования: >>> fib Вы могли бы возразить, что >>> print fib(0) None >>> Довольно легко написать функцию, которая возвращает список чисел Фибоначчи, вместо того, чтобы выводить их: >>> def fib2(n): # Возвращает первые числа Фибоначчи, не превосходящие n ... result=[] ... a,b=0,1 ... while b<n: ... result.append(b) # смотрите ниже ... a,b=b,a+b ... return result ... >>> f100=fib2(100) # вызов >>> f100 # вывод результата [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] >>> Этот пример, как обычно, демонстрирует несколько новых особенностей Python:
[Назад][Содержание][Вперед] |
|
| ||||||||||||||||
|