...

Python def что это за программа

Основы Python — кратко. Часть 5. Определение функций, основы.

Начав писать главу про ООП, понял что совсем забыл освятить такой большой и нужный раздел Пайтона как функции. Тема это большая и обширная, потому, чтобы не сильно растягивать паузу между уроками, решил разделить ее на 2 части. Сначала расскажу основы, потом уже углубленные особенности Пайтоновского функциестроения.

Функции в Пайтоне объявляются не просто, а очень просто. Вот пример самой простой:

def empty_func(): pass

Начинается объявление с ключевого слова def, что как не сложно догадаться является сокращением от define. После него идет имя функции. После имени в круглых скобках задается список параметров, в данном случае отсутствующих.
Тело функции пишется с отступом со следующей строки. учтите, что в Пайтоне функции с пустым телом запрещены, потому в качестве тела приведенной выше функции используется «пустой оператор» pass.
Теперь рассмотрим пример посерьезнее.

def safe_div(x, y): """Do a safe division :-) for fun and profit""" if y != 0: z = x / y print z return z else: print "Yippie-kay-yay, motherf___er!"

В этом примере есть несколько нововведений. первое, что бросается в глаза — это строка документации (docstring), идущая сразу после тела функции.
Обычно эта строка занимает не одну строку исходного текста (простите за каламбур) и потому задается в тройных кавычках. Она предназначена для описания функции, ее предназначения, параметров и т.п. Все хорошие ИДЕ умеют с этой строкой работать. Получить к ней доступ можно и из самой программы, используя свойство __doc__:

print safe_div.__doc__

Этим свойством (да, да, именно свойством, в Пайтоне даже функции на самом деле — классы) удобно пользоваться во время сеансов работы интерактивной консоли.

>>> from ftplib import FTP >>> print FTP.__doc__ An FTP client class. To create a connection, call the class using these argument: host, user, passwd, acct These are all strings, and have default value ''. Then use self.connect() with optional host and port argument. # дальнейшее почикано мною :-)

Вернемся к нашей исходной функции. Суть ее очень проста, она принимает 2 параметра: х и у. Если у не равен 0, она делит х на у, выводит результат на экран и возвращает свое частное в виде результата. Результат функции возвращают с помощью команды return. Благодаря механизму кортежей, описанному в прошлом уроке, функции в Пайтоне могут возвращать одновременно множество объектов.
Если же делитель все-таки равен нулю, функция выводит сообщение об ошибке. Неверно было бы предположить что в этом случае функция ничего не вернет. Правильнее будет сказать что функция вернет «ничего» 🙂 Иначе говоря, если в функции отсутствует оператор return, или же он вызван без параметров, то функция возвращает специальное значение None. В этом легко убедиться вызвав что-то типа print safe_div(10, 0).

Вот пример слегка посложнее, он взят из доклада-презентации Гвидо ван Россума.

def gcd(a, b): "Нахождение НОД" while a != 0: a,b = b%a,a # параллельное определение return b

Данная функция находит наибольший общий делитель двух чисел.

В общем, следует учитывать, что параметры в функции Пайтоном передаются по ссылке. Еще одним, возможно нетривиальным фактом к которому придется привыкать — является тот факт что сами функции являются значением, которое можно присваивать. Если воспользоваться нашей функцией safe_div для дальнейших экспериментов, то можно написать следующий код.

mystic_function = safe_div print mystic_function(10, 4)

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

Упражнения для проверки.
1. На основе существующей функции нахождения НОД, напишите функцию поиска НОК двух чисел.
2. Напишите подпрограмму табулирования функции, переданной в качестве аргумента. Так же аргументами задается начальное, конечное значение и шаг табуляции.

PS кстати, каков оптимальный объем «урока»? Что лучше — реже выходящие большие главы, или «лучше меньше да чаще».

Функции в Python

Функция — это именованный блок кода, к которому можно обратиться из лю­бого места программы. У функции есть имя и список входных парамет­ров, а также воз­вращаемое значение.

Функция позволяет использо­вать в про­грамме один и тот же фрагмент кода нес­колько раз.

Oбъявление функции в Python выглядит так:

def function_name ( argument1 , argument2 , . ):
# код функции
# def — DEclare Function — «объявить функцию»
# function_name — имя функции
# (argument1, argument2, . ) — список аргументов, поступающих на вход функции при ее вызове
# тело функции — это весь код, который идет после двоеточия

# Объявление функции

def hello (name):
print ( ‘Hello, ‘ + name)

# Вызовы функции

hello ( ‘Max’ )
hello ( ‘Ivan’ )
hello ( ‘Alex’ )
hello ( ‘Kate’ )

# Вывод

>> Hello, Max
>> Hello, Ivan
>> Hello, Alex
>> Hello, Kate

Оператор return возвращает значение из функции.

Представьте себе обычный калькулятор. Вы вводите первое число, операцию и второе число. Калькулятор возвращает нам результат операции над этими числами. Всё просто, не так ли? Функции точно так же умеют возвращать значение с помощью специального оператора return.

# Объявление функции

def sum2 ( a , b ):
return a + b

# Вызовы функции

s1 = sum2 ( 10 , 2 )
s2 = sum2 ( 108 , 100 )
s3 = sum2 ( 3 , 1 )

print ( f ‘s1 = ‘ )
print ( f ‘s2 = ‘ )
print ( f ‘s3 = ‘ )

>> s1 = 12
>> s2 = 208
>> s3 = 4

# Функция умножения двух чисел

def mult2 ( a , b ):
return a * b

# Вызовем нашу функцию

m1 = mult2 ( 10 , 2 )
m2 = mult2 ( 108 , 100 )
m3 = mult2 ( 3 , 1 )

print ( f ‘m1 = ‘ )
print ( f ‘m2 = ‘ )
print ( f ‘m3 = ‘ )

>> m1 = 20
>> m2 = 10800
>> m3 = 3

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

# Аргумент name по умолчанию равен ‘world’

def hello ( name = ‘world’ ):
print ( ‘Hello, ‘ + name)

hello ()
hello ( ‘Ivan’ )

>> Hello, world
>> Hello, Ivan

Примеры

# Написать функцию square(), вычисляющую квадрат числа.

def square ( number ):
return number * number # Возвращаем результат работы функции обратно в программу

a = square ( 2 )
print (a)

# Напишите функцию perimetr, вычисляющую периметр прямоугольника со сторонами a и b.

def perimetr ( a , b ):
return 2 * (a + b)

p = perimetr ( 4 , 3 )
print (p)

# Напишите функцию isEven, возвращающую True, если число четное, и False, если — нечетное.

def isEven ( x ):
return x % 2 == 0

print ( isEven ( 10 ))
print ( isEven ( 11 ))

# Напишите функцию amountList, которая возвращает сумму всех элементов списка.

def amountList ( lst ):
amount = 0
f or x in lst:
amount += x
return amount

print ( amountList ([ 1 , 2 , 3 ]))

mylist = [ 1 , 2 , 4 , 8 , 16 ]
s = amountList (mylist)

print ( f ‘Сумма списка равна ‘ )

>> 6
>> Сумма списка [ 1 , 2 , 4 , 8 , 16 ] равна 31

# Напишите функцию fib, которая возвращает n-ное число Фибоначчи.
# Последовательность Фибоначчи выглядит так: 1 1 2 3 5 8 13 21 34

def fib ( n ):
a, b = 0 , 1
if n == 0 : return 0
f or i in range ( 1 , n):
a, b = b, a + b
return b

print ( fib ( 2 ))
print ( fib ( 3 ))
print ( fib ( 4 ))
print ( fib ( 5 ))
print ( fib ( 10 ))

# Напишите функцию fact, вычисляющую значение факториала числа N.
# Факториал числа — это произведение всех чисел от 1 до N.
# Например, факториал числа 5 равен 120 (5! = 120).

def fact ( n ):
result = 1
while n > 1 :
result *= n
n -= 1
return result

print ( fact ( 2 ))
print ( fact ( 3 ))
print ( fact ( 4 ))
print ( fact ( 5 ))

Решение задач

1. Площадь круга

Напишите функцию, которая получает в качестве аргумента радиус круга и находит его площадь.

# Не забудьте написать функцию circle.

print ( circle ( 4 ))
print ( circle ( 1 ))

Напишите функцию, которая возвращает True, если число делится на 3, и False, если — нет.

# Не забудьте написать функцию three.

print ( three ( 4 ))
print ( three ( 3 ))

3. Максимум в списке

Напишите функцию, которая возвращает максимальный элемент из переданного в нее списка.

# Напишите функцию maxList.
mylist = [ 1 , 3 , 2 ]
print ( maxList (mylist))

4. Сколько четных

Напишите функцию, которая возвращает количество четных элементов в списке.

# Напишите функцию evenCounter.
mylist = [ 1 , 10 , 2 , 4 , 6 ]
evens = evenCounter (mylist)
print (even)

Напишите функцию, которая возвращает список с уникальными (неповторяющихся) элементам.

# Напишите функцию unique.
mylist = [ 1 , 1 , 2 , 1 , 3 , 2 , 3 ]
print ( unique (mylist))

# Вывод:
>> [ 1 , 2 , 3 ]

При подготовке материала использовались источники:
https://habr.com/ru/articles/30633/
https://pymanual.github.io/func.html

Оцените статью