Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сгп.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
76.85 Кб
Скачать

30. Функции Python Mobile, определение, вызов.

Мы уже изучили, как пишется функция, но осталась ещё кое-какая дополнительная информация по ней. Начнем с общей схемы:

def func_name(param_list):

suite

Расшифруем:

1) сначала пишется оператор def;

2) затем указывается имя функции func_name;

3) в скобках пишем список параметров param_list, которые мы передаем функции;

4) наконец, пишем тело функции suite (с обязательным отступом);

Вот пример функции, выводящий последовательности чисел Фибоначчи:

>>> def fib(n):

…        a, b = 0, 1

…        while b < n:

…             print b,

…             a, b = b, a + b

>>> fib(200)

1 1 2 3 5 8 13 21 34 55 89 144

>>>

Можно определить функцию с переменным числом параметров. Для этого существует три способа.

Первый — значение аргументов по умолчанию. При этом мы вызываем функцию с меньшим числом аргументов, остальные параметры же принимают то значение по умолчанию, которое мы установили:

>>> def func(text, name = ‘World’):

…        print text, name, ‘!’

>>> func(‘Hello’)

Hello World!

>>> func(‘Hello’, ‘Albert’)

Hello Albert!

>>>

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

>>> def func(text=’Hello’, name = ‘World’):

…        print text, name, ‘!’

>>> func()

Hello World!

>>> func(name = ‘Albert’)

Hello Albert!

>>> func(text = ‘Gold-bye’)

Gold-bye World!

>>> func(text = ‘Gold-bye’, name = ‘Albert’)

Gold-bye Albert!

>>>

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

>>> def func(number, *args):

…        print args

…        for arg in args:

…             print number, ‘*’, arg, ‘=’, number * arg

>>> func(2, 1, 2, 3, 4, 5)

(1, 2, 3, 4, 5)

2 * 1 = 2

2 * 2 = 4

2 * 3 = 6

2 * 4 = 8

2 * 5 = 10

>>>

Вот такая вот таблица умножения! Как видно из примера, написав в определении функции имя аргумента, начинающегося со звездочки «*», при вызове функции именно этому аргументу передается кортеж значений.

Напомню, если необходимо, чтобы функция возвращала определенные значения после завершения работы, используйте инструкцию return:

>>> def summ(a, b):

…        return str(a) + ’ + ’ + str(b)+ ’ = ’+ str(a+b)

>>> print summa(1, 3)

1 + 3 = 4

>>>

Список возвращаемых значений можно указать через запятую.

lambda функции

Python содержит несколько популярных особенностей, характерных для языков функционального программирования. С помощью ключевого слова lambda можно создать простую функцию без имени. Говорите, так не бывает? Это возможно! Но есть ограничение — тело функции ограничено один выражением  в одну строку, т.е. никаких вам условий и циклов:

lambda param_list: expression

Расшифрем:

1) функции передается список параметров param_list;

2) функция возвращает результат значение выражения expression.

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

>>> func=lambda a, b: a * b

>>> print func(3,2)

6

>>>

31. Классы и объекты Python Mobile, примеры. С точки зрения Python модуль это тоже объект. Он имеет атрибуты и методы, которые мы обычно используем в программе в виде переменных и функций. Кроме того, модуль также может содержать и другие объекты, которые, в свою очередь, имеют атрибуты и методы... и т.д.

Возьмем, к примеру, модуль appuifw. Для того чтобы узнать все его возможности, можно использовать функцию dir(). Набрав dir(appuifw), вы увидите список имен всех тех переменных и функций, которые доступны пользователю. У меня установлена новейшая, на момент написания, версия Python 1.4.0. (не забывайте постоянно обновляться!), и выполнение этой функции дало следующий результат:

>>> import appuifw

>>> dir(appuifw)

[‘Canvas’, ‘Form’, ‘Listbox’, ‘Text’, ‘Icon’, ‘Content_handler’, ‘app’, ‘multi_query’, ‘note, ‘popup_menu’, ‘query’, ‘selection_list’, ‘multi_selection_list’, ‘available_fonts’, ‘EEventKeyUp, ‘EEventKeyDown’, ‘EEventKey’, ‘FFormAutoFormEdit’, ‘FFormAutoLabelEdit’, ‘FFormDoubleSpaced’, ‘FFormEditModeOnly’, ‘FFormViewModeOnly’, ‘STYLE_BOLD’, ‘STYLE_ITALIC’, ‘STYLE_STRIKETHROUGH’, ‘STYLE_UNDERLINE’, ‘HIGHLIGHT_STANDARD’, ‘HIGHLIGHT_ROUNDED’, ‘HIGHLIGHT_SHADOW’, ‘EScreen’, ‘EApplicationWindow’, ‘EStatusPane’, ‘EMainPane’, ‘EControlPane’, ‘ESignalPane’, ‘EContextPane’, ‘ETitlePane’, ‘EBatteryPane’, ‘EUniversalIndicatorPane’, ‘ENaviPane’, ‘EFindPane’, ‘EWallpaperPane’, ‘EIndicatorPane’, ‘EAColumn’, ‘EBColumn’, ‘ECColumn’, ‘EDColumn’, ‘EStaconTop’, ‘EStaconBottom’, ‘EStatusPaneBottom’, ‘EControlPaneBottom’, ‘EControlPaneTop’, ‘EStatusPaneTop’]

>>>

Как видно, данный модуль представляет огромное количество средств для создания уникального интерфейса программы — ее «лица». Какие бы нужные функции программа не выполняла, необходимо обязательно продумать то, как это представить пользователю. А последний (думаю, по себе знаете) терпеть не может разбираться и угадывать то, что умеет программа, а чего нет. Если в программе тяжело разобраться, то она стирается и заменяется аналогом. Поэтому важно уделить время созданию интуитивного интерфейса, и в этом нам поможет модуль appuifw.