z = 5
elif x > 5:
y = 1
z = 11 
else:
y = 0
z = 10 
print(x, y, z)
Присутствие секций elif и else не обязательно , а количество секций elif не ограничено. Для ограничения блоков используются отступы . Включение явных ограничителей (таких, как квадратные или фигурные скобки) не обязательно. Каждый блок состоит из одной или нескольких команд, разделенных символами
новой строки. Все эти команды должны снабжаться отступами одного уровня. В приведенном примере будет выведен результат 5 0 10 .
3.3.3. Цикл while
Цикл while продолжает выполняться, пока условие (в следующем примере x > y ) остается истинным ( True ):
u, v, x, y = 0, 0, 100, 30
while x > y:
u = u + y
x = x — y
if x < y + 2:
v = v + x
x = 0
else:
v = v + y + 2
x = x - y — 2 
print(u, v)
В первой строке используется сокращенный синтаксис присваивания. Здесь u и v присваивается значение 0, x присваивается 100, а y присваивается значение 30 . Затем идет блок цикла . Цикл может содержать команды break (прерывание цикла) и continue (отмена текущей итерации цикла). Пример выводит результат 60 40 .
3.3.4. Цикл for
Цикл for — простая, но мощная конструкция для перебора любого итерируемо-го типа (например, списка или кортежа). В отличие от многих языков, цикл for в Python перебирает элементы последовательности (например, списка или кор-тежа), так что он больше напоминает циклы foreach . Следующий цикл находит в списке первое вхождение целого числа, кратного 7: item_list = [3, "string1", 23, 14.0, "string2", 49, 64, 70] for x in item_list:
if not isinstance(x, int):
continue
if not x % 7:
print("found an integer divisible by seven: %d" % x)
break
Переменной x последовательно присваивается каждое значение из списка . Если x не является целым числом, то оставшаяся часть итерации отменяется командой continue . Выполнение цикла продолжается присваиванием x следующего элемен-та списка. После того как будет найдено подходящее целое число, цикл завершается командой break . Программа выводит
целое число, кратное 7: 49
3.3.5. Определение функции
Python поддерживает гибкий механизм передачи аргументов функциям: >>> def funct1(x, y, z):
... value = x + 2*y + z**2
... if value > 0:
... return x + 2*y + z**2
... else:
... return 0
...
>>> u, v = 3, 4
>>> funct1(u, v, 2)
15
>>> funct1(u, z=v, y=2)
23
>>> def funct2(x, y=1, z=1):
... return x + 2 * y + z ** 2
...
>>> funct2(3, z=4)
21
>>> def funct3(x, y=1, z=1, *tup):
... print((x, y, z) + tup)
...
>>> funct3(2)
(2, 1, 1)
>>> funct3(1, 2, 3, 4, 5, 6, 7, 8, 9)
(1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> def funct4(x, y=1, z=1, **kwargs):
... print(x, y, z, kwargs)
>>> funct4(1, 2, m=5, n=9, z=3)
1 2 3 {'n': 9, 'm': 5}
Функции определяются командой def . Команда return определяет значение, возвращаемое функцией. Это значение может относиться к любому типу. Если команда return не была обнаружена в ходе выполнения функции, возвращается значение Python None . Аргументы функции могут передаваться по позиции или по имени (ключевому слову). В данном примере аргументы z и y передаются по имени . Для параметров функции могут определяться значения по умолчанию, которые будет использованы в том случае, если значение не указано при вызове функции . Также можно определить специальный параметр, который объ-единяет все лишние позиционные аргументы при вызове функции в кортеж . Аналогичным образом возможно определить специальный параметр, который объединяет все лишние именованные аргументы, указанные при вызове функции, в словарь .
3.3.6. Исключения
Исключения (ошибки) перехватываются и обрабатываются сложной командой try-except-else-fnally . Эта команда также может перехватывать и обрабатывать
исключения, которые вы определяете и инициируете самостоятельно. Любое не-перехваченное исключение приводит к выходу из программы. В листинге 3.1 про-демонстрирована базовая обработка исключений.
Листинг 3.1. Файл exception.py
class EmptyFileError(Exception):
pass
filenames = ["myfile1", "nonExistent", "emptyFile", "myfile2"] for file in filenames:
try:
f = open(file, 'r')
line = f.readline()
if line == "":
f.close()
raise EmptyFileError("%s: is empty" % file)
except IOError as error:
print("%s: could not be opened: %s" % (file, error.strerror)
except EmptyFileError as error:
print(error)
else:
print("%s: %s" % (file, f.readline()))
finally:
print("Done processing", file)
Здесь мы определяем собственный тип исключения, наследующий от базового типа Exception . Если исключение IOError или EmptyFileError произойдет во время выполнения команд в блоке try , выполняется соответствующий блок except . Исключение IOError может инициироваться в точке , а исключение EmptyFileError — в точке . Секция else не является обязательной , она выпол-няется в том случае, если выполнение блока try обошлось без исключений (кстати, в этом примере в блоках except можно использовать команды continue ). Секция fnally также не обязательна , она будет выполнена в конце блока независимо от того, было выдано исключение или нет.
Читать дальше