Введение в язык Питон


Исключение команд управления потоком


Первое, о чем стоит вспомнить в нашем упражнении - то, что Python "замыкает накоротко" вычисление логических выражений. Оказывается, это предоставляет эквивалент блока 'if'/'elif'/'else' в виде выражения. Итак:

    #------ "Короткозамкнутые" условные вызовы в Python -----#

    # Обычные управляющие конструкции

    if <cond1>: func1()

    elif <cond2>: func2()

    else: func3()

    # Эквивалентное "накоротко замкнутое" выражение

    (<cond1> and func1()) or (<cond2> and func2()) or (func3())

    # Пример "накоротко замкнутого" выражения

    >>> x = 3

    >>> def pr(s): return s

    >>> (x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other'))

    'other'

    >>> x = 2

    >>> (x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other'))

    'two'

Казалось бы, наша версия условных вызовов с помощью выражений - не более, чем салонный фокус; однако все становится гораздо интересней, если учесть, что оператор lambda может содержать только выражения! Раз, как мы только что показали, выражения могут содержать условные блоки, используя короткое замыкание, выражение lambda позволяет в общей форме представить условные возвращаемые значения. Базируясь на предыдущем примере:

    #--------- Lambda с короткозамкнутыми условными выражениями в Python -------#

    >>> pr = lambda s:s

    >>> namenum = lambda x: (x==1 and pr("one")) \

    ... or (x==2 and pr("two")) \

    ... or (pr("other"))

    >>> namenum(1)

    'one'

    >>> namenum(2)

    'two'

    >>> namenum(3)

    'other'




Начало  Назад  Вперед



Книжный магазин