Функции — важный компонент любого языка, и Python не является исключением. При написании любого крупного проекта невозможно обойтись без функций, поэтому каждый программист должен знать, как работать с ними.
Что такое функция
Функция — это блок кода, который можно многократно вызывать на выполнение. Она является фундаментальной частью любого языка программирования.
Функция позволяет разделять программу на самостоятельные, но связанные части. Программисты используют функции, чтобы сделать программу модульной и избежать повторения кода.
Функция может использоваться для обработки данных, она получает на вход значения, обрабатывает его и возвращает результат в программу. Также она может не возвращать значение, а выводить его на экран или записывать в файл.
Программист может написать собственную функцию или использовать готовые решения языка, если они есть, конечно. Например, лучше самому не написать функцию для определения максимального числа, а воспользоваться стандартной max() .
Python с нуля. Урок 3 | Функции
Объявление
Объявляя функцию, нужно следовать определенным правилам:
- Объявление происходит с помощью ключевого слова def , за ним идёт имя функции и круглые скобки ().
- Аргументы, передаваемые в функцию, должны находится в круглых скобках. Там же можно определить их значения по умолчанию, указав их после знака равно.
- Перед основным содержимым желательно включить строку документации (docstring), которая обычно описывает назначение и основные принципы работы функции.
- Тело функции начинается после знака двоеточия. Важно не забыть об отступах.
- Чтобы выйти из функции в Python, используют оператор return [значение] . Если оператор опущен, будет возвращено значение None .
Функцию можно объявить где угодно: внутри модуля, класса или другой функции. Если она объявляет внутри класса, то называется методом класса и вызывается так: class_name.function() .
Синтаксис объявления
Параметры (аргументы) нужно передавать в том порядке, в котором они определены в круглых скобках.
def Имя(аргументы): «Документация» Тело (инструкции) return [значение]
Пример кода
Функция складывает два числа, переданные в качестве аргументов. Если один или оба аргумента не были переданы, используются значения по умолчанию.
def print_sum(a = 2, b = 2): sum = a + b print(sum) return # вернёт None
Вызов
После определения функции её можно вызвать в любой точке скрипта, как в теле самого скрипта, так и в теле другой функции:
# определяем функцию def print_sum(a = 2, b = 2): sum = a + b print(sum) #вызываем её print_sum(5, 1)
Значение функции можно сразу передать в переменную или в другую функцию:
def sum(a = 2, b = 2): sum = a + b return sum # вернёт сумму c = sum(4, 3) # переменная c будет равна возвращаемому значению print(sum(5, 5)) # можно передать значения в аргументы другой функции
Вызов функции работает медленнее, чем обычный код. Это незаметно, пока её не вызывают в цикле. Если от цикла необходимо добиться максимального быстродействия, нужно отказаться от вызова функции и просто вставить внуть тела цикла её код.
Уроки Python / Как создать функцию, что такое функции в Python, как с ними работать
Необязательные параметры
При описании функции в Python 3 аргументы, которым задаются начальные значения, являются необязательными. Вначале должны описываться обязательные параметры и только после них необязательные.
При вызове функции нам не обязательно указывать значения необязательных параметров. Если мы хотим изменить значение аргумента, не меняя начальные значения других аргументов, можно обращаться к нему по ключу.
def example(first, second=3, third=5): print(first) print(second) print(third) example(‘my string’, third=4)
Вывод будет следующим:
my string 3 4
Функция с переменным числом аргументов
Часто возникает необходимость создать такую функцию, которая может принимать разное количество аргументов. Это можно реализовать с помощью передачи списка или массива, однако Python позволяет использоваться более удобный подход (также с использованием списка).
Для того чтобы функция могла принять переменное количество аргументов, перед именем аргумента ставится символ » * «. Когда программист передаёт аргументы, они записываются в кортеж, имя которого соответствует имени аргумента:
def variable_len(*args): for x in args: print(x) variable_len(1,2,3) # Выведет 1,2,3
Вместо одного символа звёздочки можно использовать два, тогда аргументы будут помещаться не в список, а в словарь:
def variable_len(**args): print(type(args)) for x, value in args.items(): print(x, value) variable_len(apple = «яблоко», bread = «хлеб») # Выведет apple яблоко bread хлеб
Анонимные функции
Это особый вид функций, которые объявляются с помощью ключевого слова lambda вместо def :
Лямбда функции принимают любое количество аргументов, но не могут содержать несколько выражений и всегда возвращают только одно значение.
В программировании на Python можно обойтись без анонимных функций, которые по сути являются обычными, но без имени и с ограничением в одно выражение. Однако их использование в нужных местах упрощает написание и восприятие кода. Например, в программе калькулятор мы с её помощью сделали обработчики нажатия кнопок.
Синтаксис
Синтаксис лямбда функции в Python 3 предусматривает использование только одного выражения: lambda arg1, arg2, … argn: выражение .
На практике они работают так:
x = lambda arg1, arg2: arg1 * arg2 print(x(5,5)) # Выведет 25 print(x(3,5)) # Выведет 15
Возврат значений
С помощью оператора return из функции можно вернуть одно или несколько значений. Возвращаемым объектом может быть: число, строка, None.
Чтобы вернуть несколько значений, нужно написать их через запятую. Python позволяет вернуть из функции список или другой контейнер: достаточно указать после ключевого слова return имя контейнера.
Вот пример когда возвращается список:
def x(n): a = [1,3] a = a * n return a print(x(2)) # выведет [1,3,1,3]
А это пример того, как функция в Python 3 возвращает несколько значений. Так как переменные перечислены через запятую, то они образуют список. Эти значения можно присвоить сразу нескольким переменным, как это показано в следующем примере:
def example(): language = «python» version = 3 flag = True return language, version, flag language, version, flag = example() print(language, version, flag) # выведено будет python 3 True
Рекурсия
Рекурсией называется процесс, когда функция вызывает саму себя. Её можно использовать вместо циклов, например, для задачи по нахождению факториала.
def f(num): if num == 0: return 1 return f(num-1) * num print(f(5)) # Выведет число 120
Рекурсию рекомендуется использовать только там, где это действительно необходимо. Интерпретатор Python автоматически выделяет память для выполняющейся функции, если вызовов самой себя будет слишком много, это приведёт к переполнению стека и аварийному завершению программы. Следующий код вызовет исключение «RecursionError», которая показывает, что превышен максимальный лимит рекурсии.
def x(num): a = num — 1 print(a) x(a) x(5)
Узнать максимальный лимит и его изменить можно с помощью getrecursionlimit() и setrecursionlimit(предел) из библиотеки sys.
Один из примеров применения рекурсии — это расчёт чисел Фибоначчи.
Пустая функция
Чтобы создать пустую функцию, нужно в её теле использовать оператор заглушки pass . Тогда она будет существовать и не выполнять никаких действий.
Такие функции могут использоваться для различных специфичных задач, например, при работе с классами, асинхронной отправкой форм.
Обычно программисты делают функцию пустой, когда хотят отложить её реализацию на потом (например, алгоритм её уже спланирован, но ещё не реализован, а запустить на выполнение код надо, чтобы проверить работоспособность остального кода).
def example(): pass
Области видимости
Область видимости — важная составляющая любого языка программирования. С её помощью в одном модуле можно использовать одно и то же имя переменной несколько раз.
Области видимости также делают программу более безопасной, не позволяя получить доступ к важным переменным.
В Python существует две области видимости:
- Глобальная. Переменные объявляются непосредственно внутри модуля и доступны из любой точки программы.
- Локальная. Переменные объявляются в теле функции и доступны только внутри неё.
Важно понимать, из локальной области видимости можно обратить к переменным, находящимся в глобальной, но не наоборот.
Причём чтение глобальной переменной можно осуществить, просто обратившись к ней. А вот для записи надо отдельно указывать с помощью ключевого слова global, что мы работаем именно с глобальной переменной!
val1 = «my global» val2 = «another global» def example(): print(val1) # Выведет my global global val2 val2 = «change another global» example() print(val2) # Выведет change another global
Подробнее про области видимости можно прочитать в отдельной статье на сайте.
Основные встроенные функции в Python
Python предоставляет программисту все необходимые основные функции для работы, кроме того, используя дополнительные модули (подключая разные библиотеки), можно найти уже реализованные методы для практически любой задачи.
- print() Выводит объекты на экран или в файл. Пример использования print(«output string», end=»») . Принимает аргументы:
- object — то, что нужно вывести;
- sep — разделитель, который ставиться между объектов, по умолчанию — пробел;
- end — окончание после объекта, например управляющий символ «n»;
- file — атрибут, позволяющий передать объект в файл (по умолчанию выводит на экран);
Источник: all-python.ru
Python-сообщество
- Начало
- » Python для новичков
- » Вычисление значения функции с заданной точностью
#1 Дек. 21, 2014 12:36:40
Вычисление значения функции с заданной точностью
Нужна помощь, вот задание: Написать программу на языке Python вычисляющую данное значение с заданной точностью
E=0.001 (точность — разность предыдущего значения итерации и текущего)
Я написал вот такой код, который, говорят, слишком замороченный, да и я не уверен в его правильности:
#! /usr/bin/env/python import math from math import factorial x=float(raw_input(‘Write x:’)) stepen = 0 g = 3 answer = 1 e = 0.001 znam = factorial(g) while (E 0.001 ): stepen += 2 argstepen= x** int(stepen) stepen += 2 argfact = float(argstepen) / int(znam) answer = answer — argfact it1 = float(answer) print (answer) g += 2 znam = factorial(g) argstepen = x** int(stepen) argfact = float(argstepen) / int(znam) answer = answer + argfact g += 2 znam = factorial(g) print ‘ANSWER:’ print (answer) e = float(it1 — it2) print ‘E:’ print (e)
В чем дело? Какой код правильнее? Заранее спасибо.
Прикреплённый файлы:
Функция.PNG (5,0 KБ)
#2 Дек. 21, 2014 14:58:03
Вычисление значения функции с заданной точностью
Это на рекуррентное соотношение задача.
>>> def f(x, eps): . s = 0 . n = 1 . sl, psl = 1, 0 . while abs(sl — psl) >= eps: . s += sl . psl = sl . sl *= -x * x / (n * n + 3 * n + 2) . n += 2 . return s . >>> f(2.5, 0.001) 0.23937956415653147 >>> import math >>> math.sin(2.5) / 2.5 0.23938885764158263 >>>
Отредактировано py.user.next (Дек. 21, 2014 15:00:10)
Источник: python.su
Python. Урок 10. Функции в Python
Урок посвящен созданию функций в Python и работе с ними (передача аргументов, возврат значения и т.п.). Также рассмотрены lambda-функций, их особенности и использование.
Что такое функция в Python?
По своей сути функции в Python практически ничем не отличаются от функций из других языков программирования. Функцией называют именованный фрагмент программного кода, к которому можно обратиться из другого места вашей программы (но есть lambda-функции, у которых нет имени, о них будет рассказано в конце урока). Как правило, функции создаются для работы с данными, которые передаются ей в качестве аргументов, также функция может формировать некоторое возвращаемое значение.
Создание функций
Для создания функции используется ключевое слово def, после которого указывается имя и список аргументов в круглых скобках. Тело функции выделяется также как тело условия (или цикла): четырьмя пробелами. Таким образом самая простая функция, которая ничего не делает, будет выглядеть так.
def fun(): pass
Возврат значения функцией осуществляется с помощью ключевого слова return, после которого указывается возвращаемое значение. Пример функции возвращающей единицу представлен ниже.
>>> def fun(): return 1 >>> fun() 1
Работа с функциями
Во многих случаях функции используют для обработки данных.
Эти данные могут быть глобальными, либо передаваться в функцию через аргументы. Список аргументов определяется на этапе реализации и указывается в круглых скобках после имени функции. Например операцию сложения двух аргументов можно реализовать вот так.
>>> def summa(a, b): return a + b >>> summa(3, 4) 7
Рассмотрим еще два примера использования функции: вычисление числа Фибоначчи с использованием рекурсии и вычисление факториала с использованием цикла.
Вычисление числа Фибоначчи.
>>> def fibb(n): if n == 0: return 0 elif n == 1: return 1 elif n == 2: return 1 else: return fibb(n-1) + fibb(n-2) >>> print(fibb(10)) 55
>>> def factorial(n): prod = 1 for i in range(1, n+1): prod *= i return prod >>> print(factorial(5)) 120
Функцию можно присвоить переменной и использовать ее, если необходимо сократить имя. В качестве примера можно привести вариант использования функции вычисления факториала из пакета math.
>>> import math >>> f = math.factorial >>> print(f(5)) 120
lambda-функции
Lambda-функция – это безымянная функция с произвольным числом аргументов и вычисляющая одно выражение. Тело такой функции не может содержать более одной инструкции (или выражения). Данную функцию можно использовать в рамках каких-либо конвейерных вычислений (например внутри filter(), map() и reduce()) либо самостоятельно, в тех местах, где требуется произвести какие вычисление, которые удобно “завернуть” в функцию.
>>> (lambda x: x**2)(5) 25
Lambda-функцию можно присвоить какой-либо переменной и в дальнейшем использовать ее в качестве имени функции.
>>> sqrt = lambda x: x**0.5 >>> sqrt(25) 5.0
Списки можно обрабатывать lambda-функциями внутри таких функций как map(), filter(), reduce(), о них мы ещё поговорим, а пока рассмотрим пример с map(). Функция map принимает два аргумента, первый – это функция, которая будет применена к каждому элементу списка, а второй – это список, который нужно обработать.
>>> l = [1, 2, 3, 4, 5, 6, 7] >>> list(map(lambda x: x**3, l)) [1, 8, 27, 64, 125, 216, 343]
P.S.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Раздел: Python Уроки по Python Метки: Python, Уроки Python
Python. Урок 10. Функции в Python : 5 комментариев
- Sva 20.07.2021 Спасибо)) Благодаря этим материалам хочу стать хацкером)
- Дмитрий 22.09.2022 fibb(5-1) + fibb(5-2) – это не 4 + 3, а число Фибоначчи по 4 + число Фибоначчи по 3, что соответствует Ф(4) = (Ф(3) + Ф(2)) = 3 и Ф(3) = (Ф(2) + Ф(1)) = 2 ==> 3+2 = 5
Источник: devpractice.ru