Как вызвать функцию в python через консоль

Обновлено: 07.07.2024

Чтобы начать играть с Python, нам нужно открыть командную строку на твоём компьютере. Ты уже должна знать, как это сделать — мы изучали это в главе Введение в интерфейс командной строки.

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

Мы хотим открыть консоль Python, так что набери python , если работаешь в Windows, или python3 для Mac OS/Linux, и нажми enter .

Твоя первая команда Python!

После запуска Python командная строка изменилась на >>> . Для нас это означает, что сейчас мы можем использовать только команды на языке Python. Тебе не нужно вводить >>> — Python будет делать это за нас.

Если ты хочешь выйти из консоли Python, в любой момент — просто введи exit() или используй сочетание клавиш Ctrl + Z для Windows и Ctrl + D для Mac/Linux. Тогда ты больше не будешь видеть >>> .

Пока что мы не хотим выходить из консоли Python. Мы хотим узнать больше о ней. Давай начнём с чего-нибудь совсем простого. Например, попробуй набрать простое математическое выражение, вроде 2 + 3 , и нажми enter .

Прекрасно! Видишь, как выскочил ответ? Python знает математику! Ты можешь попробовать другие команды, например:

Чтобы вычислить степень числа, например, 2 в кубе, мы вводим:

Поиграй с этим немного и затем вернись сюда :).

Как видишь, Python является прекрасным калькулятором. Если тебе интересно, что ещё можно сделать.

Строки

Как насчет твоего имени? Введи своё имя в кавычках, вот так:

Ты только что создала свою первую строку! Это последовательность символов, которые могут быть обработаны компьютером. Строка должна всегда начинаться и заканчиваться одинаковым символом. Им может быть одинарная ( ' ) или двойная ( " ) кавычка (разницы нет!) Кавычки говорят Python'у, что внутри них находится строка.

Строки могут быть слиты воедино. Попробуй так:

Ты также можешь умножать строки на число:

Если тебе нужно поставить апостроф внутри строки, то есть два способа сделать это.

Используй двойные кавычки:

или поставь перед апострофом обратную косую черту ( \ ):

Прикольно, да? Чтобы увидеть своё имя прописными буквами, просто набери:

Ты только что использовала метод upper своей строки! Метод (такой как upper() ) представляет собой набор инструкций, который должен выполнить Python над заданным объектом (в нашем случае: "Ola" ) при его вызове.

Если ты хочешь узнать количество букв в своём имени, то и для этого тоже существует функция!

Интересно, почему иногда мы вызываем функцию добавлением . к концу строки (как "Ola".upper() ), а иногда сначала пишем имя функции и затем помещаем строку в скобки? Ну, в некоторых случаях функции принадлежат объектам, например, функция upper() , которая может быть применена только к строкам. В этом случае мы называем функцию методом. В другом случае функции не относятся к чему-то конкретному и могут использоваться для различных типов объектов, например, функция len() . Вот почему мы передаем "Ola" в качестве параметра функции len .

Подведём итог

Хорошо, достаточно о строках. Пока ты узнала следующее:

  • командная строка — ввод команд (кода) в интерактивную командную строку Python приводит к ответам на Python;
  • числа и строки — в Python числа используются для вычислений, а строки - для текстовых объектов;
  • операторы, такие как + и *, объединяют значения для получения нового;
  • функции, такие как upper() и len(), выполняют действия над объектами.

Таковы основы каждого языка программирования, который ты можешь выучить. Готова к чему-то посложнее? Мы уверены, что готова!

Ошибки

Давай попробуем кое-что новенькое. Можем ли мы получить длину числа так же, как длину твоего имени? Введи len(304023) и нажми Enter :

Мы получили нашу первую ошибку! Иконкой мы будем обозначать код, который при запуске сработает не так, как ожидается. Совершение ошибок (даже преднамеренных) -- важная часть обучения!

Она говорит о том, что у объектов типа «int» (целые числа) нет длины. Так что же мы можем сейчас сделать? Может быть, мы можем написать наше число в виде строки? У строк ведь есть длина, верно?

Сработало! Мы использовали функцию str внутри функции len . str() преобразует всё в строки.

  • Функция str преобразует объекты в строки
  • Функция int преобразует объекты в целые числа

Важно: мы можем преобразовать число в текст, но не всегда удается преобразовать текст в числа — например, каков будет результат int('hello') ?

Переменные

Переменные — важное понятие в программировании. Переменная — это всего лишь имя для чего-то, чтобы использовать его позднее. Программисты используют переменные для хранения данных, чтобы их код был более читабельным, и для того, чтобы им не пришлось запоминать, что есть что.

Допустим, мы хотим создать новую переменную с именем name :

Видишь? Это очень легко! Просто введи: name равно Ola.

Как ты уже заметила, твоя программа не возвращает ничего, как было ранее. Так откуда мы знаем, что переменная действительно существует? Просто введи name и нажми Enter :

Ура! Твоя первая переменная:)! Ты всегда можешь изменить то, к чему она относится:

Ты также можешь использовать переменные и в функциях:

Круто, правда? Переменными, конечно, может быть что угодно, и цифры тоже! Попробуй следующее:

Но что делать, если мы использовали неправильное имя? Можешь догадаться, что произойдет? Давай попробуем!

Ошибка! Как ты можешь видеть, в Python есть различные типы ошибок, эта называется NameError. Python выдаст эту ошибку при попытке использовать переменную, которая пока не определена. При возникновении этой ошибки проверь свой код, чтобы узнать, не написала ли ты неправильно имя переменной.

Попрактикуйся в этом какое-то время и посмотри, что ты сможешь сделать!

Функция print

Если просто ввести name , интерпретатор Python вернет строковое представление переменной 'name', которым, в нашем случае, являются буквы M-a-r-i-a, окруженные одинарными кавычками, ''. Когда ты вводишь print(name) , Python "печатает" содержание переменной на экран, без кавычек, что удобнее.

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

Списки

Помимо строк и целых чисел Python имеет богатую коллекцию других типов объектов. Сейчас мы собираемся представить тебе один из них — list (список). Списки — это именно то, о чём ты подумала: объекты, которые являются списками других объектов :)

Давай начнем с создания списка:

Отлично, это пустой список. Не особенно полезен, да? Давай создадим список лотерейных номеров. Мы не хотим повторять их каждый раз, так что присвоим список переменной:

Замечательно, у нас есть список! Что мы можем с ним сделать? Для начала посмотрим, как много лотерейных номеров в нашем списке. Есть идеи, какую функцию можно использовать для этого? Ты её уже знаешь!

Точно! len() вернет тебе количество объектов в списке. Удобно, правда? Пожалуй, мы теперь отсортируем его:

Эта команда не возвращает ничего, она просто меняет порядок номеров в списке. Давайте выведем его на экран и посмотрим, что получилось:

Как видишь, номера в списке теперь отсортированы от меньшего к большему. Поздравляем!

Может, нам нужно обратить порядок? Давай сделаем это!

Просто, правда? Если хочешь добавить что-то к своему списку, то можешь воспользоваться этой командой:

Если ты хочешь получить только первый номер в списке, то можешь воспользоваться индексами. Индекс — это номер позиции в списке, на котором находится нужное нам значение. Программисты предпочитают начать считать с 0, так что первому объекту в списке соответствует индекс 0, следующему —1, и так далее. Попробуй ввести:

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

Чтобы удалить что-либо из списка, тебе понадобятся индексы, с которыми мы уже разобрались выше, и команда pop() . Давай попробуем закрепить пройденное на примере: мы будем удалять первый элемент из нашего списка.

Сработало как по маслу!

В качестве дополнительной тренировки попробуй следующие индексы: 6, 7, 1000, -1, -6 и -1000. Можешь предсказать результат? Видишь логику работы?

Словари

Для проходящих руководство дома: этот раздел рассмотрен в видео Python Basics: Dictionaries.

Словари схожи со списками, но ты обращаешься к значениям словаря по ключу, а не по индексу. Ключом может быть любая строка или число. Давай создадим пустой словарь:

Это показывает, что мы создали пустой словарь. Ура!

Теперь попробуй следующую команду (можешь заменить значения на своё имя, страну и т.д.):

Этой командой ты создала переменную participant с тремя парами ключ/значение:

  • ключ name , указывающий на значение 'Ola' (объект типа строка ),
  • ключ country , указывающий на значение 'Poland' (еще одна строка ),
  • и ключ favorite_numbers , указывающий на значение [7, 42, 92] (объект типа список с тремя числами внутри).

Значение конкретного ключа можно узнать следующим образом:

Видишь, синтаксис похож на работу со списком. Но вместо того, чтобы запоминать индекс, тебе нужно помнить ключ.

Что случится, если мы спросим у Python значение несуществующего в словаре ключа? Можешь предположить? Давай попробуем и узнаем наверняка!

Смотри, другая ошибка! Эта называется KeyError. Python услужливо напоминает, что ключа 'age' нет в словаре.

Когда стоит использовать словарь, а когда список? Это хороший вопрос для самостоятельного размышления. Сделай предположение перед тем, как читать дальше.

  • Тебе нужна упорядоченная последовательность элементов? Список — наш выбор.
  • Тебе нужны сочетания ключ/значение, чтобы быстро искать значения (по ключу) в дальнейшем? Словарь отлично подойдет.

Словари, как и списки, изменяемы, т. е. они могут быть изменены после того, как были созданы. Ты можешь добавить новые пары ключ/значение в словарь следующим образом:

Так же как в примере со списками, использование функции len() вернёт число пар ключ/значение в словаре. Попробуй сама:

Надеюсь, всё вышеизложенное понятно. :) Готова к новым приключениям со словарями? На следующей строке тебя ждут изумительные вещи.

Ты можешь использовать команду pop() для удаления элементов из словаря. Скажем, ты хочешь удалить элемент с ключом 'favorite_numbers' . Просто набери следующую команду:

Как видишь, пара ключ/значение с ключом 'favorite_numbers' была удалена.

Помимо этого, ты можешь заменить значение, связанное с уже существующим ключом. Набери:

Значение, на которое ссылается ключ 'country' , изменилось с 'Poland' на 'Germany' . :) Захватывает? Ещё бы! Ты выучила еще одну потрясающую штуку!

Подведём итог

Шикарно! Теперь ты знаешь немало о программировании. Мы познакомились с:

  • ошибками — теперь ты знаешь как читать и анализировать ошибки, которые возникают, если Python не понимает твоей команды;
  • переменными — именами для объектов, которые упрощают твой код и делают его более читабельным;
  • списками — последовательностями объектов в заданном порядке;
  • словарями — объектами, хранящими пары ключ/значение.

Готова к продолжению? :)

Сравнения

Для проходящих руководство дома: этот раздел рассмотрен в видео Python Basics: Comparisons.

В программировании часто надо что-то сравнивать. Что проще всего сравнить друг с другом? Числа, конечно. Давай посмотрим, как это работает:

Мы передали Python несколько чисел для сравнения. Как ты можешь заметить, Python сравнивает не только числа, но и результаты методов (например, умножения). Неплохо, правда?

Хочешь спросить, почему мы написали двойной символ равенства == , чтобы проверить, одинаковы ли числа? Потому что одинарные символ равенства = уже задействован под присваивание значения переменным. Ты всегда, всегда должна писать два символа равенства == , если хочешь проверить, одинаковы ли объекты. Мы также можем проверить, различаются ли объекты. Для этого мы используем != , как показано в примере выше.

Дадим Python еще два задания:

С > и < все понятно, но что значат >= и <= ? Читай их следующим образом:

  • x > y означает: x больше y
  • x < y означает: x меньше y
  • x <= y означает: x меньше или равен y
  • x >= y означает: x больше или равен y

Супер! Хочешь еще? Тогда попробуй вот это:

Ты можешь передать Python столько чисел, сколько захочешь, и он будет возвращать ответ! Хитро, правда?

  • and — если ты используешь оператор and , оба сравнения по обе стороны от него должны быть True (верны), чтобы результат всей команды был равен True.
  • or — если ты используешь оператор or , достаточно одному из сравнений по обе стороны от него быть равным True, чтобы результат всей команды также равнялся True.

Ты когда-нибудь слышала выражение "сравнивать тёплое с мягким"? Попробуем сделать что-то подобное в Python:

Как мы видим, Python не знает, как сравнить число ( int ) и строку ( str ) между собой. Поэтому он просто возвращает нам ошибку TypeError и предупреждает, что объекты заданных типов не могут быть сравнены.

Логические значения

Между прочим, ты только что познакомилась с новым типом объектов в Python. Он называется Boolean (логический) — и это, наверное, самый простой тип из всех.

Существует только два логических объекта в Python:

Чтобы Python понимал тебя, ты всегда должна писать True с заглавной буквы (остальные прописные). true, TRUE, tRUE не будут восприниматься — только True. (Та же логика применима к False, само собой.)

Ты можешь присваивать переменным логические значения! Смотри сюда:

Попрактикуйся с логическими значениями на примере этих выражений:

  • True and True
  • False and True
  • True or 1 == 1
  • 1 != 2

Поздравляем! Логические значения — одна из самых классных фишек программирования, и ты только что научилась ими пользоваться!

До сих пор мы писали весь код в интерактивной консоли, где Python сразу анализировал, обрабатывал и выполнял наши команды. Мы были ограничены одной строкой. Обычно, программы сохраняются в файлах и выполняются интерпретатором или компилятором нашего языка программирования. Пока мы только просили интерпретатор Python выполнять наши однострочные команды из консоли. Однако нам понадобится больше места для следующих задач, поэтому задача минимум:

  • закрыть интерактивную консоль Python;
  • открыть наш текстовый редактор;
  • сохранить код в новом файле;
  • запустить его!

Чтобы закрыть интерактивную консоль Python, просто набери функцию exit() :

Это вернёт тебя в командную строку.

В главе Текстовый редактор мы выбрали себе редактор. Нам нужно открыть его сейчас и записать следующий код в новый файл (или, если ты используешь Chromebook, создай новый файл в облачной IDE и открой файл, который будет во встроенном редакторе кода):

Очевидно, ты уже искушенный Python разработчик, так что не стесняйся добавить что-нибудь по своему вкусу из ранее изученного.

Теперь нам нужно сохранить файл с кодом и дать ему подходящее имя. Давай назовем его python_intro.py и сохраним на рабочий стол. Мы можем назвать файл как хотим, но важно, чтобы название заканчивалось на .py. Расширение .py говорит операционной системе, что это исполняемый файл python, и Python может его запустить.

Примечание Ты должна уже была заметить одну из крутейших вещей в редакторах кода: цвета! В интерактивной консоли Python весь текст был одного цвета, сейчас же функция print должна отличаться по цвету от текста, который передается в неё в качестве аргумента. Это называется «синтаксическая подсветка», и это действительно удобная штука для программирования. Цвет подсветки может подсказать тебе о незакрытой кавычке или опечатке в ключевом слове (таком как def в определении функции, с которым мы скоро познакомимся). Это одна из причин, по которой мы используем редакторы кода :)

После сохранения файла пришло время запустить его! Используя навыки из раздела о командной строке, открой терминал и поменяй текущую директорию на рабочий стол.

С аргументом -c (команда) (при условии, что ваш файл называется foo.py ):

Кроме того, если вас не волнует загрязнение пространства имен:

И золотая середина

Сделайте свою жизнь проще, установите Spyder. Откройте файл и запустите его (нажмите зеленую стрелку). После этого ваш метод hello() определен и известен консоли IPython, поэтому вы можете вызывать его из консоли.

Сначала вы должны вызвать функцию, как они сказали вам, или основание ничего не отобразит в выводе, после этого сохраните файл и скопируйте путь к файлу, щелкнув правой кнопкой мыши на папке файла и нажав «Копировать файл», затем зайдите в терминал и напишите: - cd "путь к файлу" - python "имя файла, например (main.py)", после чего он отобразит вывод вашего кода.

Используйте python-c инструмент ( pip install python-c ), а затем просто напишите:

Или если в ваших файлах python нет столкновений с именами функций:

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

Ниже приведен файл Odd_Even_function.py, в котором есть определение функции.

Теперь, чтобы вызвать то же самое из командной строки ниже, варианты работали для меня.

Параметры 1 Полный путь к exe \ python.exe -c "import Odd_Even_function; Odd_Even_function.OE (100)"

Вариант 2 Полный путь к exe \ python.exe -c "из Odd_Even_function import OE; OE (100)"

Примерно так: call_from_terminal.py

Это работает в Bash.

Всегда есть возможность ввести python в командной строке с помощью команды python .

Затем импортируйте свой файл, чтобы импортировать файл_примера .

Затем запустите команду с помощью example_file.hello ()

Это позволяет избежать странной функции копирования .pyc, которая возникает при каждом запуске python -c и т. Д.

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

У меня было требование использовать различные утилиты Python (диапазон, строки и т. Д.) В командной строке, и я написал инструмент pyfunc специально для этого. Вы можете использовать его, чтобы обогатить ваш опыт использования командной строки:

Если вы устанавливаете пакет runp с pip install runp , это вопрос запуска:

runp myfile.py hello

Интересно, что если цель состояла в том, чтобы напечатать на консоль командной строки или выполнить какую-либо другую мелкую операцию на python, вы можете передать ввод в интерпретатор python следующим образом:

А также файлы труб ..

* Обратите внимание, что расширение не должно быть .py для второго, чтобы работать. ** Также обратите внимание, что для bash вам может понадобиться экранировать символы

Давайте сделаем это немного проще для себя и просто используем модуль .

Попробуйте: pip install compago

Затем используйте так:

Примечание. В настоящее время в Python 3 есть ошибка, но она прекрасно работает с Python 2.

Изменить . На мой взгляд, еще более удачным вариантом является модуль fire. Google, что позволяет легко передавать аргументы функции. Он устанавливается с pip install fire . Из их GitHub:

Вот простой пример.

Затем из командной строки вы можете запустить:

Я написал небольшой скрипт на Python, который можно вызывать из командной строки bash. Он принимает имя модуля, класса и метода, который вы хотите вызвать, и параметры, которые вы хотите передать. Я назвал его PyRun, отключил расширение .py и сделал его исполняемым с помощью chmod + x PyRun, чтобы я мог просто быстро вызвать его, как показано ниже:

Сохраните это в файле с именем PyRun

Вот пример модуля, чтобы показать, как это работает. Это сохраняется в файле с именем PyTest.py:

Попробуйте запустить эти примеры:

Обратите внимание на последний пример экранирования скобок для передачи кортежа в качестве единственного параметра для метода Second.

Если вы передадите слишком мало параметров для того, что нужно методу, вы получите ошибку. Если вы пройдете слишком много, он игнорирует дополнительные. Модуль должен находиться в текущей рабочей папке, поставить PyRun можно в любом месте вашего пути.

Добавьте этот фрагмент в конец вашего скрипта

Теперь вы можете вызвать вашу функцию, запустив

Это работает, потому что вы передаете аргумент командной строки (строку имени функции) в locals , словарь с текущей таблицей локальных символов. Парантезы в конце сделают функцию вызываемой.

update: , если вы хотите, чтобы функция принимала параметр из командной строки, вы можете передать sys.argv[2] следующим образом:

Таким образом, выполнение python myscript.py myfunction "hello" выдаст hello .

python -c 'from myfile import hello; hello()' где myfile должен быть заменен базовым именем вашего скрипта Python. (Например, myfile.py становится myfile ).

Однако, если hello() является вашей «постоянной» главной точкой входа в вашем скрипте Python, то обычный способ сделать это заключается в следующем:

Это позволяет вам выполнить скрипт просто запустив python myfile.py или python -m myfile .

Некоторое объяснение здесь: __name__ - это специальная переменная Python, которая содержит имя выполняемого в данный момент модуля, кроме , когда модуль запускается из командной строки, и в этом случае он становится > .

Просто поместите hello() где-нибудь ниже функции, и она выполнится, когда вы выполните python your_file.py

Для более аккуратного решения вы можете использовать это:

Таким образом, функция будет выполняться только при запуске файла, а не при импорте файла.

С -c (команда) аргумент (при условии, что ваш файл называется foo.py ):

альтернативно, если вы не заботитесь о загрязнении пространства имен:

просто поставить hello() где-то ниже функции и он будет выполняться, когда вы делаете python your_file.py

для более аккуратного решения вы можете использовать это:

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

python -c 'from myfile import hello; hello()' здесь myfile необходимо заменить базовым именем вашего скрипта Python. (Напр., myfile.py становится myfile ).

однако, если hello() ваша "постоянная" основная точка входа в ваш скрипт Python, тогда обычный способ сделать это выглядит следующим образом:

это позволяет выполнить скрипт, просто запустив python myfile.py или python -m myfile .

некоторые объяснения здесь: __name__ - специальная переменная Python, которая содержит имя модуля в настоящее время выполняется,за исключением когда модуль запускается из командной строки, в этом случае он становится "__main__" .

Я написал быстрый маленький скрипт Python, который вызывается из командной строки bash. Он принимает имя модуля, класса и метода, который вы хотите вызвать, и параметры, которые вы хотите передать. Я называю его Пирун и перестал .py расширение и сделал его исполняемым с chmod +x PyRun, так что я могу просто назвать его быстро, как следовать:

сохраните это в файле под названием PyRun

вот пример модуля, чтобы показать, как это работает. Это сохраняется в файле под названием PyTest.py:

попробуйте запустить следующие примеры:

обратите внимание на последний пример экранирования скобок для передачи кортежа в качестве единственного параметра второму методу.

если вы передадите слишком мало параметров для того, что нужно методу, вы получите ошибку. Если вы проходите слишком много, он игнорирует дополнительные. Модуль должен быть в текущей рабочей папке, поставить PyRun можно в любом месте на вашем пути.

интересно, что если целью была печать на консоль командной строки или выполнение какой-либо другой минутной операции python, вы можете передать ввод в интерпретатор python следующим образом:

а также трубные файлы..

*обратите внимание, что расширение не должно быть.py для второго, чтобы работать. ** Также обратите внимание, что для bash вам может потребоваться избежать символов

Если вы устанавливаете пакет runp с pip install runp не работает:

runp myfile.py hello

давайте сделаем это немного проще для себя и просто использовать модуль.

попробуй: pip install compago

тогда используйте так:

Примечание:ошибка в Python 3 на данный момент, но отлично работает с Python 2.

Edit: еще лучший вариант, на мой взгляд-это модуль пожар от Google, что позволяет легко также передавать аргументы функции. Это установлен с pip install fire . Из их GitHub:

вот простой пример.

затем из командной строки, вы можете запустить:

У меня было требование использовать различные утилиты python(range, string и т. д.) в командной строке и написал инструмент pyfunc специально для этого. Вы можете использовать его, чтобы обогатить опыт использования командной строки:

эта функция не может быть запущена из командной строки, так как она возвращает значение, которое не будет обработано. Вы можете удалить возврат и использовать print вместо

это всегда возможность ввести python в командной строке с помощью команды python

затем импортируйте файл так импорт example_file

затем выполнить команду example_file.hello ()

Это позволяет избежать странного .функция копирования pyc, которая появляется каждый раз при запуске python-c и т. д.

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

что-то вроде этого: call_from_terminal.py

это работает в bash.

ниже Odd_Even_function.py файл с определением функции.

теперь, чтобы вызвать то же самое из командной строки ниже, параметры работали для меня.

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

def <имя функции>([список аргументов]):
оператор 1
оператор 2

оператор N

Здесь имя функции придумывается программистом подобно именам переменных и, так как функция – это определенное действие, то ее имя следует выбирать как глагол, например:

go, show, get, set и т.п.

Далее, идет набор операторов, которые образуют тело функции. Именно они начинают выполнятся при ее вызове.

Давайте зададим простейшую функцию, которая будет выводить «hello» в консоль:

Смотрите, мы здесь придумали имя функции «sayHello», записали пустые круглые скобки без аргументов и через двоеточие определили тело функции в виде конструкции print("hello"). Но это лишь определение функции. Самого вызова здесь еще нет и если запустить программу, то ничего не произойдет.

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

Имя функции без круглых скобок – это фактически ссылка на функцию:

то есть, ссылка на специальный объект, представляющий ту или иную функцию. А раз это ссылка, то мы можем выполнить такую операцию:

тем самым определить ее синоним и вызвать ее уже через это второе имя:

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

Здесь будет уже два вызова этой функции. И так далее. Причем, обратите внимание, мы вызываем функцию только после ее определения. То есть, если записать ее вызвать в самом начале программы, то возникнет ошибка, т.к. данная функция не была определена. Это вроде как:

"сначала нужно испечь пирог и только потом можно его есть."

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

Если нужно определить еще одну функцию, то мы ее можем записать после первой:

Имена функций должны быть уникальными (также как и имена переменных), поэтому я назвал ее myAbs, т.к. функция abs уже существует. И предполагаю, что она будет вычислять модуль переданного ей числа. Соответственно, в круглых скобках обозначаю этот аргумент. Если теперь мы ее вызовем:

то увидим значение None. Это произошло потому, что функция myAbs явно не возвращает никакого значения. По идее, мы ожидаем возврата переменной x. Для этого нужно записать оператор return, после которого через пробел указываем возвращаемую величину:

Теперь, при вызове функции, получим ожидаемое значение 5. Как это в деталях работает? Вызывая функцию с аргументом -5, переменная x начинает ссылаться на этот числовой объект. Далее, выполняется тело функции и идет проверка: если x<0, то x=-x (меняем знак числа), иначе x не меняется. Затем, выполняется оператор return и функция myAbs возвращает вычисленное значение x.

Такой подход позволяет передавать функции самые разные значения, например, так:

И это делает ее работу универсальной – с любыми числовыми данными. Причем, как только встречается оператор return функция завершает свою работу. То есть, если после данного оператора будут идти еще какие-либо конструкции:

То при вызове этой функции:

Ничего в консоль выведено не будет, т.к. вызов был завершен на операторе return. А вот если поставить print до этого оператора:

то мы увидим значение 5.8. Используя эту особенность, можно определять такие функции:

В данном случае мы будем получать значения True для неотрицательных чисел и False – для отрицательных. И далее, ее можно использовать так:

В результате, список будет содержать только положительные числа. Правда, в данном случае, функцию можно записать гораздо короче:

Здесь сам оператор >= будет возвращать значение True или False.

Если нужно создать функцию, принимающую два аргумента, например, для вычисления площади прямоугольника, то это делается так:

То есть, аргументы перечисляются через запятую, а тело функции состоит всего из одного оператора return, в котором сразу выполняются необходимые вычисления.

Вызовем эту функцию:

И увидим результат ее работы – значение 31,0. При этом, на первое значение 10 ссылается первый аргумент w, а на второе 5.5 – второй аргумент h. Вот так можно определять различное число аргументов у функций.

Далее, при вызове функций мы должны им передавать ровно столько параметров, сколько указано в их определении. Например, вот такие вызовы работать не будут:

Здесь указано или слишком много, или слишком мало фактических параметров.

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

И теперь, можно вызвать эту функцию так:

Смотрите, если формальный параметр не указан, то берется его значение по умолчанию. Если же мы его явно задаем, то берется переданное значение. Здесь нужно помнить только одно правило: формальные аргументы должны быть записаны последними в списке аргументов функции. То есть, вот такая запись:

приведет к синтаксической ошибке.

Теперь, давайте добавим этой функции еще один вот такой формальный параметр:

и каждому параметру здесь будет соответствовать свое значение в соответствии с указанным порядком. А можно ли вызвать эту функцию, указав только первый и последний аргумент? Оказывается да, Python позволяет это делать. Вот таким образом:

Мы здесь вторым аргументом явно указываем имя формального параметра и присваиваем ему желаемое значение. В результате аргументы msg и sep будут принимать переданные значения, а аргумент end – значение по умолчанию. Это называется именованные параметры, когда мы указываем не просто значение, но еще и имя параметра.

Если нам требуется сразу вернуть несколько значений, то это можно сделать так. Предположим наша функция будет сразу определять и периметр и площадь прямоугольника:

И, далее, вызываем ее:

получаем результат в виде кортежа из двух чисел. Или, так:

Аналогичным образом можно возвращать и списки и словари и вообще любые типы данных.

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

И, затем, вызвать ее:

Интересной особенностью Python в определении функций является возможность переопределять уже существующие функции. Например, у нас задана вот такая функция:

Тогда ниже мы можем ее переопределить, если укажем то же самое имя:

Теперь, при ее вызове:

увидим выполнение последнего, переопределенного варианта. Если дальше ее переопределить вот так:

то все равно будет доступна только одна такая функция, но теперь уже с одним обязательным аргументом:

Когда это может пригодиться на практике? Например, если мы хотим определить некоторую функцию в зависимости от условия:

Здесь при значении переменной TYPE_FUNC равной True будет определен первый вариант функции, а иначе – второй вариант. Иногда это бывает полезно.

Элементы функционального подохда к программированию

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

И вызвать мы ее можем так:

Затем, нам потребовалась функция, которая бы находила максимальное из трех чисел. Как ее можно реализовать? Используя идею функционального программирования, это можно сделать следующим образом:

Смотрите, здесь оператор return возвращает значение, которое возвращает функция max2. Но, прежде чем она будет выполнена, вызовется другая функция max2, которая определит максимальное среди чисел b и c. То есть, прежде чем вызвать первую функцию max2 необходимо вычислить ее параметры: первый просто берется их x, а второй вычисляется вложенной функцией max2. Вот так это работает и вот что из себя представляет элемент функционального подхода к программированию.

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

так как строки могут спокойно сравниваться между собой. И вообще, любые величины, которые можно сравнивать на больше и меньше, можно подставлять в качестве аргументов функции max3 и max2.

Задания для самоподготовки

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

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

3. Написать функцию поиска максимального значения из переданного ей списка значений.

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

Видео по теме


































































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

Читайте также: