0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Работаем с функциями в Python

Работаем с функциями в Python

Функция – это структура, которую вы определяете. Вам нужно решить, будут ли в ней аргументы, или нет. Вы можете добавить как аргументы ключевых слов, так и готовые по умолчанию. Функция – это блок кода, который начинается с ключевого слова def, названия функции и двоеточия, пример:

Эта функция не делает ничего, кроме отображения текста. Чтобы вызвать функцию, вам нужно ввести название функции, за которой следует открывающаяся и закрывающаяся скобки:

Просто, не так ли?

Примеры функций Python: вызов, отступы, аргументы и возвращаемые значения

Дата публикации: 2019-06-18

От автора: функции в Python применяются для использования кода в нескольких местах в программе, иногда их также называют методом или процедурами. Python предоставляет вам много встроенных функций, таких как print(), но также дает возможность создавать собственные функции.

В этом руководстве мы рассмотрим:

Как определить и вызвать функцию в Python

Значение отступа (пробела) в Python

Как функция возвращает значение?

Статья в тему:  Не можете отменить приглашения в одноклассниках

Бесплатный курс «Python. Быстрый старт»

Получите курс и узнайте, как создать программу для перевода текстов на Python

Аргументы в функциях

Как определить и вызвать функцию в Python

Функция в Python определяется оператором «def», за которым следуют имя функции и круглые скобки.

Давайте определим функцию с помощью команды def func1(): и вызовем ее. Результатом функции будет «I am learning Python function».

Функция print func1() вызывает функцию def func1(): и выводит команду «I am learning Python function». В Python есть набор правил для определения функции.

Любые аргументы или входные параметры должны быть помещены в скобки

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

Код в каждой функции начинается с двоеточия (:) и должен иметь отступ (пробел)

Оператор return (выражение) исходит из функции, дополнительно передавая значение вызывающей стороне. Оператор return без аргументов совпадает с оператором return None.

Значение отступа (пробела) в Python

Прежде чем мы ознакомимся с функциями Python, важно, чтобы мы понимали правила отступа для объявления функций Python, и эти правила применимы к другим элементам Python, а также к объявлению условий, циклов или переменных.

Python использует стиль отступов для определения кода, так как функции Python не имеют явных начальных или конечных фигурных скобок, указывающих начало и конец функции, для этого они должны полагаться на отступ. Здесь мы возьмем простой пример с командой «print». Когда мы напишем функцию «print» прямо под def func1(): она выдаст «indentation error: expected an indented block».

Статья в тему:  Какой эксель лучше. Что такое Excel

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

По крайней мере, одного отступа достаточно, чтобы ваш код работал успешно. Но в качестве лучшей практики рекомендуется оставить около 3-4 отступов для вызова функции.

Также необходимо, чтобы при объявлении отступа вы сохраняли тот же отступ для всего остального кода. Например, на снимке экрана ниже, когда мы вызываем другой оператор «все еще в func1», и когда он не объявлен прямо под первым оператором, будет отображаться ошибка отступа «unindent does not match any other indentation level.»

Когда мы применим одинаковые отступы для обоих операторов, это даст ожидаемый результат.

Как функция возвращает значение?

Команда «return» в Python указывает, какое значение нужно вернуть вызывающей функции. Давайте рассмотрим это на следующем примере.

Шаг 1) Здесь — мы видим, когда функция не «возвращает». Например, нам нужен квадрат 4, и он должен дать ответ «16» при выполнении кода. Это то, что мы получим, когда мы просто используем код «print x*x». Но когда вы вызовите функцию «print square», она выдаст «None». Это потому, что когда вы вызываете функцию, рекурсия не происходит и опускается до конца функции. Python возвращает «None» из-за сбоя в конце функции.

Шаг 2) Чтобы сделать это более понятным, мы заменим команду вывода на команду присваивания. Давайте проверим вывод.

Статья в тему:  Создание выкроек. Программы для моделирования одежды

Когда вы запускаете команду «print square(4)», она на самом деле возвращает значение объекта, поскольку у нас нет какой-либо конкретной функции для запуска, она возвращает «None».

Шаг 3) Теперь мы увидим, как получить вывод, используя команду «return». Когда вы используете функцию «return» и выполняете код, он выдаст «16».

Шаг 4) Функции в Python сами по себе являются объектом, и объект имеет некоторое значение. Здесь мы увидим, как Python обрабатывает объект. При запуске команды «print square» возвращается значение объекта. Поскольку мы не передали ни одного аргумента, у нас нет какой-либо конкретной функции для запуска, поэтому она возвращает значение по умолчанию (0x021B2D30), которое является местоположением объекта. В практической программе на Python вам, вероятно, никогда не понадобится это делать.

Аргументы в функциях

Аргумент — это значение, которое передается функции при ее вызове. Другими словами, на вызывающей стороне это аргумент, а на стороне функции — параметр. Давайте посмотрим, как работает аргумент Python.

Бесплатный курс «Python. Быстрый старт»

Получите курс и узнайте, как создать программу для перевода текстов на Python

Шаг 1) Аргументы объявляются в определении функции. При вызове функции вы можете передать значения для этих аргументов, как показано ниже.

Шаг 2) Чтобы объявить значение аргумента по умолчанию, присвойте ему значение при определении функции.

Пример: x не имеет значений по умолчанию. Значения по умолчанию y = 0. Когда мы предоставляем только один аргумент при вызове функции умножения, Python назначает предоставленное значение для x, сохраняя значение y = 0. Следовательно, умножение x * y = 0.

Статья в тему:  Как выйти из обновленного контакта. Как выйти из контакта

Шаг 3) На этот раз мы изменим значение на y = 2 вместо значения по умолчанию y = 0, и функция вернет результат (4×2) = 8.

Шаг 4) Вы также можете изменить порядок передачи аргументов в Python. Здесь мы изменили порядок значений x и y на x = 4 и y = 2.

Шаг 5) Несколько аргументов также могут быть переданы в виде массива. Здесь в примере мы вызываем несколько аргументов (1,2,3,4,5), вызывая функцию (*args). Пример: мы объявили несколько аргументов как число (1,2,3,4,5) при вызове функции (*args); вывод будет (1,2,3,4,5).

В Python 2.7. перезагрузка функций не поддерживается. Перезагрузка функций — это возможность создавать несколько методов с одинаковым именем с разной реализацией. Перезагрузка функций полностью поддерживается в Python 3

Существует путаница между методами и функциями. Методы в Python связаны с экземплярами объекта, а функция — нет. Когда Python вызывает метод, он связывает первый параметр этого вызова с соответствующей ссылкой на объект. Проще говоря, автономная функция в Python — это «функция», тогда как функция, которая является атрибутом класса или экземпляра, является «методом».

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

Концепция callable-объекта является фундаментальной в Python. Когда мы думаем о том, что может быть «вызвано» (called), то первое, что приходит на ум, это функции. Но кроме функций есть еще методы и классы, а также любой объект, в типе которого определен магический метод __call__ :

Статья в тему:  Pal платежная система. Что такое Paypal и как им пользоваться

В этом примере мы «вызываем» класс Joke для инстанцирования нового объекта, а затем осуществляем «вызов» экземпляра класса как если бы это была обычная функция (о классах мы будем говорить в лекции «ООП. Классы»).

Можно сказать, что наличие (arg1, arg2. ) указывает на то, что происходит «вызов» и, в большинстве случаев, генерируется опкод CALL_FUNCTION (вызов callable-объекта с позиционными аргументами):

Вот описание опкода из документации:

Calls a callable object with positional arguments. argc indicates the number of positional arguments. The top of the stack contains positional arguments, with the right-most argument on top. Below the arguments is a callable object to call. CALL_FUNCTION pops all arguments and the callable object off the stack, calls the callable object with those arguments, and pushes the return value returned by the callable object.

Давайте кратко рассмотрим обработчик опкода CALL_FUNCTION:

Фактически происходит вызов функции call_function, куда передается адрес вершины стека sp и число позиционных аргументов oparg :

call_function является общей для вызова функций, методов, классов и других объектов:

Происходит подготовка аргументов для вызова функции _PyObject_Vectorcall , где nargs и nkwargs указывает на число позиционных и именованных аргументов, соответственно, nkwargs представляет собой кортеж с именами ключевых аргументов (см. опкод CALL_FUNCTION_KW ), stack указывает на первый аргумент функции, а func указывает на объект PyFunctionObject (нашу функцию add ):

Статья в тему:  Что делать если комп сильно тупит. Почему тормозит компьютер

В функции _PyObject_Vectorcall проверяется поддерживает ли callable-объект новый протокол Vectorcall, который был введен в PEP 590 с целью оптимизации вызова callable-объектов:

The poor performance is largely a result of having to create intermediate tuples, and possibly intermediate dicts, during the call. This is mitigated in CPython by including special-case code to speed up calls to Python and builtin functions. Unfortunately, this means that other callables such as classes and third party extension objects are called using the slower, more general tp_call calling convention.

This PEP proposes that the calling convention used internally for Python and builtin functions is generalized and published so that all calls can benefit from better performance.

Отметим, что все пользовательские функции, начиная с Python 3.8, поддерживают протокол Vectorcall. Возможно, вы обратили внимание, что последнем полем структуры PyFunctionObject является vectorcall типа vectorcallfunc :

Это поле инициализируется при создании новой функции (см. опкод MAKE_FUNCTION ):

Таким образом, вызов:

Отметим лишь два момента, первый, это получение объекта кода, о котором мы говорили ранее, и второе, создание и исполнение (evaluation) нового фрейма (о фреймах мы будем говорить в одной из следующих лекций) с телом нашей функции.

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector