- •27. Типы данных и строки Python Mobile, примеры.
- •28. Списки и кортежи Python Mobile, примеры.
- •29. Управляющие конструкции Python Mobile, примеры.
- •30. Функции Python Mobile, определение, вызов.
- •32. Модули в Python. Разработка пользовательского интерфейса в Python Mobile. Диалоговые функции note, popup_menu, примеры использования. Note(text[, type[, global] ]
- •33. Модули в Python. Разработка пользовательского интерфейса в Python Mobile. Диалоговые функции query, multi_query, selection_list, примеры использования.
- •34. Структура пользовательского интерфейса мобильного приложения для s60, объект app, атрибуты body, title, menu, примеры использования.
- •35. Структура пользовательского интерфейса мобильного приложения для s60, объект app, атрибуты screen, exit_key_handler(), примеры использования.
- •In_emulator()
- •Is_ui_thread()
- •Inactivity()
- •39.Работа с файлами в Python Mobile, объект File, примеры использования.
- •40.Чтение и запись текста в Python Mobile, примеры. Чтение и запись текста
- •41. Чтение и запись в файл указанных значений в Python Mobile, примеры.
- •42. Создание локальных баз данных средствами Python Mobile, примеры.
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.
