|
| ||||||||||||
| ||||||||||||
Основы программирования.Основные операторы.
Функции.В современной теории информатики ключевым является понятие функции – небольшого модуля программного кода, выполняющего определённые действия и обособленного от основного кода программы. Основное достоинство использования функций – это возможность повторного использования программного кода, т.е вы можете вызывать функцию многократно не только в той программе, где она была написана, но, возможно, и в других программах, другими людьми и для других целей. Вы и до этого использовали много раз функции, функции написанные разработчиками Питона, которые очень универсальны и допускают использование в программах различного типа. При этом, вам совершеннно не нужно знать, как, например, работает функция range, вы просто используете её, не заботясь, кем и как она была написана. Этот принцип сокрытия информации позволяет легко использовать стандартные функции, не зная деталей их работы. В Питоне реализована исчерпывающая поддержка функций. В Питоне функция определяется ключевым словом def, имени функции, затем в скобках идут некие параметры, разделяемые запятой, передаваемые в функцию из программы. К этим параметрам можно обращаться внутри функции по их именам. Впрочем, функция может не принимать никаких параметров, тогда в скобках не нужно ничего писать.После определения функции к ней можно обращаться по имени из любого места программы, передавая ей регламентированные в определении параметры: >>> 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 Функции могут не только принимать параметры, но и возвращать результат своей работы.(Это похоже на отношения начальника и подчинённого: программа вызывает функцию, передавая в неё некие параметры, и считывает результат работы с этими параметрами). Возврат значения из функции в вызывающую программу осуществляется посредством оператора return. >>> def fib(n): # Функция, возвращающая числа Фибоначчи, не превосходящие n ... result = [1]#Этот список будет содержать числа Фибоначчи ... a, b = 0, 1 ... while b < n: ... print b, ... a, b = b, a+b ... result.append(b);#Вставление в результативный список очередного числа ... return result #Возвращение результата ... >>> # Теперь функцию можно вызвать ... fib(2000) Результат выполнения: [1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597] В определении функций есть некоторые нюансы. Рассмотрим, к примеру, функцию range(). Её можно вызвать в 3-х разных формах – с один параметром, с двумя и с тремя. Для организации такого поведения совсем необязательно описывать три различные функции, можно применить параметры по умолчанию:
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
while 1:
ok = raw_input(prompt)
if ok in ('д', 'да', 'yes'): return 1
if ok in ('н', 'нет', 'no', 'nop'): return
0
retries = retries - 1
if retries < 0: raise IOError,
'refusenik user'
print complaint
или в таком виде:
i = 5
def f(arg=i):
print arg
i = 6
f()#Выведет не 6, а 5
Механизм параметров по умолчанию действует так: если переменная задана при вызове функции, как её параметр, то в функцию передаётся именно это значение, иначе в функцию передаётся значение по умолчанию. Внимание: значение по умолчанию оценивается лишь один раз, это играет роль при задании значения по умолчанию спискам, например:
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
Результат работы программы:
[1]
[1, 2]
[1, 2, 3]
Если вам нужно, чтобы параметры по умолчанию передавались раздельно, то используйте следующую форму:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
Ключи.В Питоне есть другая возможность передавать значения в функцию – через ключи в формате 'ключ=значение', например:
def parrot(voltage, state='крутой', action='шок', type='Волнистый'):
print "-- "Попугай не будет", action,
print "если вы пропустите ток в", voltage, "вольт через него."
print "-- Попугай", type
print "-- Это", state, "!"
Такую функцию можно вызвать любым из способов ниже:
parrot(1000)
parrot(action = 'А-а-а-а-а-у-у-ш-ш-ш', voltage = 1000000)
parrot('тысячу', state = 'заболеет')
parrot('миллион', 'вернётся к жизни', 'прыжок')
А вот таким образом функцию вызывать нельзя:
parrot()
# требуемый аргумент опущен
parrot(voltage=5.0, 'dead') #аргумент не ключ использован как ключ
parrot(110, voltage=220) # повторение значение одного и того же аргумента
parrot(actor='John Cleese') # неизвестный ключ
В общем, список ключей может содержать ключи со значениями в любом порядке, причём неважно, имеет ли данный аргумент значение по умолчанию или нет. Но важно помнить, что нельзя дублировать аргумент, переданный в функцию, ключом. Например, вызов функции так, как показано ниже вызовет по этой причине ошибку: >>> def function(a): ... pass ... >>> function(0, a=0) ERROR: ключ переопределён Если в заголовке функции присутствует параметр в формате **имя, то в него включаются все ключи, которые были переданы в функцию, но не были определены в её заголовке. С этим параметром может также употребляться другой параметр, имеющий формат *имя. В него передаются аргументы, не входящие в список обязательных параметров функции. Учтите, что аргумент *имя должен стоять перед **имя:
def cheeseshop(kind, *arguments, **keywords):
print "-- У вас есть какие-нибудь", kind, '?'
print "-- Нет, всех съели"
for arg in arguments: print arg
print '-'*40
for kw in keywords.keys(): print kw, ':', keywords[kw]
Функция может быть вызвана, например, так:
и вот каким будет результат работы: -- У вас есть какие-нибудь зонты? -- Нет, всех съели Очень жаль. Действительно, ужасно жаль. ---------------------------------------- client : Михаил Горбачёв shopkeeper : Борис Ельцин sketch : Белый Дом Передача в функцию переменного числа аргументов.Часто используемым приёмом в программировании является передача в функцию переменного числа аргументов. Для этого в Питоне можно воспользоваться символом * перед списком аргументов переменной длины. Аргументы в теле функции могут быть разделены(см. выше). Перед списком аргументов может следовать(необязательно) один или несколько обязательных аргументов: def fprintf(file, format, *args): file.write(format % args) Использование лямбда функций.Лямбда функции пришли в Питон из языка Лисп и могут показаться необычными программисту на Си. Лямбда функции – это небольшие функции, которые создают другие функции, на своей основе. Чтобы быть более понятным, приведу такой пример: lambda a, b: a+b – вычисляет сумму двух своих аргументов. На основе функции, возвращающей lambda можно построить другие функции, например: >>> def make_incrementor(n): ... return lambda x: x + n#x – параметр, который передаётся в порождённую функцию f(x) ... >>> f = make_incrementor(42) >>> f(0) 42 >>> f(1) 43 Документирование функций.Хорошим стилем является документация каждой функции. Для этого сразу после заголовка поместите краткое описание функции, заключённое в тройные кавычки. Всё содержимое внутри тройных кавычек выводится как есть, в “сыром” виде. Такой способ позволяет легко понять назначение функции, прочитав исходный текст или воспользовавшись специальным сервером документации Питона. Назад | Содержание | Вперед
|
|
CITForum © 1997–2025