Функцией называется отдельный блок программы. У него может быть имя, он может принимать аргументы, с которыми потом будет работать, и может возвращать результат своей работы.
Параметрами функции называются специальные переменные, которые будут принимать конкретные значения при вызове этой функции. Часто являются локальными переменными внутри этой функции, которые принимают аргументы в качестве значений.
Аргументами называются переменные (выражения, литералыи пр.), переданные в функцию при вызове. По сути, аргументы - это источник реальных значений параметров функции при ее вызове.
Литерал - фактическое значение, которое записывается в переменную или передается в функцию. К примеру, в записи x = 1 литералом является 1.
Можно рассмотреть функцию как черный ящик, в который вкладывают параметры. Ящик что-то делает, вы можете даже не знать, что именно, а потом предоставляет вам возможность работать с результатами своей работы.
В Python функция определяется или декларируется так:
def say_hello():
return "Hello"Важнейшие элементы функции:
- Ключевое слово
defговорит о том, что дальше будет функция. - После
defследует название функции, приведенная выше называетсяsay_hello. - Затем следуют скобки с параметрами функции.
- После закрывающей скобки идет двоеточие. Как мы знаем, двоеточие в Python обозначает, что далее будет некий блок кода, выделенный отступами. В случае с условием это блок условия, тело условия, в случае с циклом - тело цикла, в случае с функцией - тело функции или код функции.
- Ключевое слово
returnиспользуется в теле функции для того, чтобы завершить работу функции и вернуть ее результат. Если не написать return, функция вернетNone. Хорошим тоном считается возвращать какое-нибудь значение явно. - Результат работы функции - результат выполнения функции, который она возвращает. В приведенном примере результатом работы функции будет строка
"Hello", из функции она вернется благодаря ключевому словуreturn
В Python принято тело функции, как и тело любого блока, выделять отступом в 4 пробела.
Все, что мы обсуждаем - только лишь создание функции, но не использование ее. Для использования функции ее необходимо вызвать.
Созданную (объявленную) функцию необходимо вызвать, чтобы она выполнила свою задачу. До тех пор, пока функция не вызвана, она бесполезна и ничего не делает.
Вызовем нашу функцию: say_hello()
Если просто написать функцию и вызвать ее, мы не увидим возвращаемый результат. Он вернется, но после этого потеряется. Для того, чтобы этот результат не потерять, его нужно передать в работу другой функции, сохранить в переменную или любым другим образом поймать обработать. К примеру, поместим ее в функцию print в качестве аргумента:
print(say_hello()) # HelloФункции так же могут принимать параметры:
def plus(num1, num2):
result = num1 + num2
return resultЗдесь num1 и num2 - параметры функции plus.
При создании функции вы описываете параметры, при вызове - передаете аргументы. Значения аргументов попадают в параметры и внутри функции - это параметры или просто локальные переменные.
В Python, если вы декларируете параметры, то вы обязаны их туда передать, иначе получите ошибку. Вызовем нашу функцию plus с двумя числами-аргументами - 10 и 5:
ten = 10
five = 5
plus(ten, five)
# функция вывела 15
plus(10, 5)
# функция вывела 15В момент выполнения функции параметры num1 и num2 примут значения 10 и 5 соостветственно.
Так же в python можно передавать аргументы не по порядку, но с явным указанием аргумента и соответствию аргумента передаваемому значению
plus(num1=10, num2=5)
plus(num2=5, num1=10)Как видно из примера выше, аргументы можно передавать и в переменных, и литералами.
def func(positional, keyword=value, *args, **kwargs)
passВ Python можно различить 4 вида параметров у функции:
- Позиционные аргументы обязательны и не имеют значений по умолчанию.
- Аргументы с ключевым словом необязательны и имеют значения по умолчанию.
- Список с произвольным количеством аргументов необязателен и не имеет значений по умолчанию.
- Словарь с произвольным количеством аргументов с ключевым словом необязателен и не имеет значений по умолчанию.
def test(a, b=10, *c, **d):
summa = a + b
if c:
summa += sum(c)
if d:
summa += sum(d.values())
return summa
print(test(15)) # 25
print(test(15, 5)) # 20
print(test(15, 5, 1, 2, 3)) # 26
print(test(15, 5, 1, 2, 3, x=10, y=20)) # 56Все в Python является объектом. Функции не выделяются и тоже являются объектами. Как и любые други типы данных, функции можно хранить в переменных, передавать параметрами в другие функции и хранить в словарях, списках и кортежах:
Пример передачи функции в качестве параметра:
def run_operation(num1, num2, operation):
return operation(num1, num2)
def plus(num1, num2):
return num1 + num2
minus = lambda num1, num2: num1 - num2
run_operation(10, 5, plus) # 15
run_operation(10, 5, minus) # 5Хранение функции в словаре:
def plus(num1, num2):
return num1 + num2
minus = lambda num1, num2: num1 - num2
functions_dict = {
'+': plus,
'-': minus
}
def operation(num1, num2, func_dict, func_name):
return func_dict[func_name](num1, num2)
print(operation(2, 3, functions_dict, '-'))В языке python нет анонимных функций в обычном виде, но есть однострочные лямбда-выражения, которые могут использоваться в качестве замены маленьких функций.
Синтаксис у них следующий:
ключевое слово lambda, затем перечень параметров, затем двоеточие - и в той же строке выражение, аналогичное выражению после ключевого слова return в обычной однострочной функции:
lambda arguments : expression
Примеры:
lambda age: 'Senior' if age > 55 else 'Adult'
(lambda x, y: x + y)(2, 3)И напоследок - маленький забавный пример использования словаря. Напоминаю, что значением может выступать что угодно:
>>> calculator = {
'plus': lambda x, y: x + y,
'minus': lambda x, y: x - y,
'mul': lambda x, y: x*y,
'div': lambda x, y: x/y,
'mod': lambda x, y: x%y
}
calculator['minus'](9,3)
6Функция map принимает два параметра: функцию и итератор, например, список.
map применяет к каждому элементу списка переданную функцию.
string_numbers = ['1', '2', '3', '4', '5']
new_list = list(map(int, string_numbers))
print(new_list)
# [1, 2, 3, 4, 5, 6, 7]Еще один пример:
def my_square(num):
return num ** 2
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squared_numbers = list(map(my_square, numbers))
print(squared_numbers)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]Аналогичным образом в любую функцию высшего порядка можно передавать не только встроенную функцию, но и самописную, и лямбда-выражение.
Функция filter принимает два аргумента: какой функцией фильтровать итератор и сам итератор. Функция должна возвращать True или False. При помощи функции из первого параметра filter создает ленивый итератор из тех значений входящего итератора, которые прошли проверку.
В примере ниже провкерку пройдут только нечетные числа:
filter(lambda x: x % 2, range(10))Функция reduce при помощи первого параметра - функции сводит второй параметр - итератор к одному значению. Для применения функции нужно подключать библиотеку functools. Пример:
functools.reduce(lambda x, y: x+y, list_of_numbers)Для работы с файлами вам потребуются следующие функции:
- open
- write
- read
- close
Примеры:
import sys
filename = sys.argv[1]
# далее открываем файл на чтение (опция 'r')
f = open(filename, 'r') # в файле теперь file descriptor
for line in f: # для каждой строки в файле
print(line)
f.close() # закрытие файлаЗдесь надо обратить внимание на следующие строки:
import sys - включение в нашу программу библиотеки системных функций, с помощью которой мы можем работать с параметрами командной строки, к примеру.
filename = sys.argv[1], где sys.argv - функция системной библиотеки sys. Она считывает 1-й параметр из списка параметров командной строки.
Если мы осуществим вызов файла нашей программы prog.py в консоли, и передадим ей файл вот так:
C:\python3\python.exe prog.py testfile.txtто python считает нулевым параметром имя нашей программы (prog.py), первым = имя переданного файла (testfile.txt), вторым - следующий параметр, если он есть, и так далее.
Таким образом мы передали программе файл, прочитали его построчно и вывели. На данный момент пока по работе с файлами этого достаточно.
Есть три варианта импорта библиотек: импорт целиком всей библиотеки, импорт перечня функций из нее или импорт функции с псевдонимом:
import sys #
from sys import argv #
from sys import argv as cli_param #Написать 2 функции. Первая функция будет принимать строку и приводить ее к нижнему регистру.
Вторая функция будет принимать строку и проводить ее к верхнему регистру.
После чего с помощью map применить ваши функции к списку строк.
Отдельно каждую функцию к отдельному списку строк!
Написать функцию которая будет простое число возводить в квардрат.
Необходимо возвести в квадрат все простые числа в списке используя функцию map

