Коде def что это за программа

Функция в Python: руководство для начинающих

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

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

Цель этой статьи – дать вам знания, необходимые для начала работы с функциями в Python.

Итак, давайте начнем!

Зачем нужны функции Python?

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

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

Уроки Python / Как создать функцию, что такое функции в Python, как с ними работать

Фактически, основной (main) код — это тоже функция, просто очень важная. Все другие функции логически выстраиваются, чтобы выполняться из основного кода.

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

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

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

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

Даже сложные операции вполне могут быть набором нескольких не слишком сложных. А для осуществления каждой небольшой операции можно создать отдельную функцию и вызывать ее по имени. Такой подход сделал современные программы куда более понятными.

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

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

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

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

Уроки Python / Повторное использование кода с помощью функций и модулей (часть 1)

Что собой представляет функция в Python?

Функция в Python – классический пример многократного использования кода.

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

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

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

Дело в том, что Python придерживается принципа DRY. Аббревиатура расшифровывается как Don’t Repeat Yourself («Не повторяйся»).

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

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

Определение функции

Функция – это подпрограмма, которая работает с данными и производит некоторый вывод.

Чтобы определить функцию Python, вам нужно будет использовать ключевое слово def перед именем вашей функции. Сразу за именем добавляются круглые скобки, за которыми следует двоеточие.

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

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

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

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

Правила присвоения имени функции такие же, как для переменных. Имя должно начинаться или с буквы от A до Z в любом регистре, или с подчеркивания _ . Остальная часть имени может содержать символы подчеркивания, цифры от 0 до 9, любые буквы в верхнем или нижнем регистре.

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

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

Типы функций в Python

В Python есть много видов функций. И каждый из них по-своему очень важен:

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

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

Встроенные функции Python

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

Например, функция print() выводит указанный объект на стандартное устройство вывода (экран) или в файл текстового потока.

В Python 3.6 есть 68 встроенных функций. Давайте рассмотрим несколько наиболее часто используемых.

Функция all()

Метод all() возвращает True , если все элементы в данном итерируемом объекте истинны. В противном случае возвращается False .

Синтаксис метода all() :

all(iterable)

Метод all() принимает единственный параметр — iterable . Это любой итерируемый объект (список, кортеж, словарь и т.д.), который содержит элементы.

Читайте также:
Программа реконструкция и реновация это что

# all values true l = [1, 3, 4, 5] print(all(l)) # all values false l = [0, False] print(all(l)) # one false value l = [1, 3, 4, 0] print(all(l)) # one true value l = [0, False, 5] print(all(l)) # empty iterable l = [] print(all(l)) # Output: # True # False # False # False # True

Функция abs()

Метод abs() возвращает абсолютное значение заданного числа. Если число является комплексным, abs() возвращает его величину.

Синтаксис метода abs() :

abs(num)

Метод abs() принимает единственный аргумент — num . Это число, абсолютное значение которого должно быть возвращено. Число может быть целым, с плавающей точкой или комплексным.

# random integer integer = -20 print(‘Absolute value of -20 is:’, abs(integer)) #random floating number floating = -30.33 print(‘Absolute value of -30.33 is:’, abs(floating)) # Output: # Absolute value of -20 is: 20 Absolute value of -30.33 is: 30.33

Функция enumerate()

Метод enumerate() добавляет счетчик к итерируемому объекту и возвращает индексы элементов с их значениями.

enumerate(iterable, start = 0)

Метод enumerate() принимает два параметра:

  • iterable – последовательность, итератор или объекты, поддерживающие итерацию.
  • start (необязательный) – enumerate() начинает отсчет с этого числа. Если start опущен, за начало принимается 0.

grocery = [‘bread’, ‘milk’, ‘butter’] enumerateGrocery = enumerate(grocery) print(type(enumerateGrocery)) # converting to list print(list(enumerateGrocery)) # changing the default counter enumerateGrocery = enumerate(grocery, 10) print(list(enumerateGrocery)) # Output # # [(0, ‘bread’), (1, ‘milk’), (2, ‘butter’)] # [(10, ‘bread’), (11, ‘milk’), (12, ‘butter’)]

Также существует множество других встроенных функций, например:

  • ascii() — для вывода символов, отличных от ASCII
  • bin() — для бинарного представления числа
  • dict() — чтобы создать словарь
  • sum() — для вычисления суммы
  • help() — для вызова справочника Python
  • len() — чтобы определить длину итерируемого объекта
  • max() — поиск максимального значения
  • min() — поиск минимального значения
  • pow() — чтобы возвести число в степень.

Рекурсивные функции в Python

Рекурсия – это определение чего-либо в терминах самого себя.

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

Мы знаем, что функция в Python может вызывать другие функции. Но функция может вызывать и сама себя. Конструкции такого типа и называются рекурсивными функциями.

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

Факториал числа – это произведение всех целых чисел от 1 до этого числа. Например, факториал 5 (обозначается как 5!) это 1 * 2 * 3 * 4 * 5 = 120.

# An example of a recursive function to # find the factorial of a number def calc_factorial(x): «»»This is a recursive function to find the factorial of an integer»»» if x == 1: return 1 else: return (x * calc_factorial(x-1)) num = 4 print(«The factorial of», num, «is», calc_factorial(num))

В приведенном выше примере calc_factorial() является рекурсивной функцией, потому что она вызывает саму себя.

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

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

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

От редакции Pythonist. Больше примеров использования рекурсии можно найти в статье «Примеры программ с использованием рекурсии на языке Python».

Лямбда-функции в Python

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

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

Лямбда-функция в Python имеет следующий синтаксис:

lambda arguments: expression

Лямбда-функции могут иметь любое количество аргументов, но только одно выражение.

# Program to show the use of lambda functions double = lambda x: x * 2 print(double(5)) # Output # 10

В приведенной выше программе lambda x: x * 2 – это лямбда-функция. Здесь x – аргумент, а x * 2 — выражение, которое вычисляется и возвращается.

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

Пользовательские функции Python

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

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

Преимущества пользовательских функций

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

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

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

Пример пользовательской функции

def add_numbers(x,y): sum = x + y return sum num1 = 5 num2 = 6 print(«The sum is», add_numbers(num1, num2)) # Output: # Enter a number: 2.4 # Enter another number: 6.5 # The sum is 8.9

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

Создаем калькулятор на Python

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

# This function adds two numbers def add(x, y): return x + y # This function subtracts two numbers def subtract(x, y): return x — y # This function multiplies two numbers def multiply(x, y): return x * y # This function divides two numbers def divide(x, y): return x / y print(«Select operation.») print(«1.Add») print(«2.Subtract») print(«3.Multiply») print(«4.Divide») # Take input from the user choice = input(«Enter choice(1/2/3/4):») num1 = int(input(«Enter first number: «)) num2 = int(input(«Enter second number: «)) if choice == ‘1’: print(num1,»+»,num2,»=», add(num1,num2)) elif choice == ‘2’: print(num1,»-«,num2,»=», subtract(num1,num2)) elif choice == ‘3’: print(num1,»*»,num2,»=», multiply(num1,num2)) elif choice == ‘4’: print(num1,»/»,num2,»=», divide(num1,num2)) else: print(«Invalid input»)

В результате получим следующее:

Output Select operation. 1.Add 2.Subtract 3.Multiply 4.Divide Enter choice(1/2/3/4): 3 Enter first number: 15 Enter second number: 14 15 * 14 = 210

Заключение

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

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

Успехов в дальнейшем освоении Python!

Источник: pythonist.ru

Функции¶

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

Именные функции, инструкция def¶

Функция в Python — объект, принимающий аргументы и возвращающий значение. Обычно функция определяется с помощью инструкции def .

Определим простейшую функцию:

def add(x, y): return x + y

Читайте также:
Easyrecovery что за программа

Инструкция return говорит, что нужно вернуть значение. В нашем случае функция возвращает сумму x и y .

Теперь мы ее можем вызвать:

>>> add(1, 10) 11 >>> add(‘abc’, ‘def’) ‘abcdef’

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

>>> def newfunc(n): . def myfunc(x): . return x + n . return myfunc . >>> new = newfunc(100) # new — это функция >>> new(200) 300

Функция может и не заканчиваться инструкцией return , при этом функция вернет значение None :

>>> def func(): . pass . >>> print(func()) None

Аргументы функции¶

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

>>> def func(a, b, c=2): # c — необязательный аргумент . return a + b + c . >>> func(1, 2) # a = 1, b = 2, c = 2 (по умолчанию) 5 >>> func(1, 2, 3) # a = 1, b = 2, c = 3 6 >>> func(a=1, b=3) # a = 1, b = 3, c = 2 6 >>> func(a=3, c=6) # a = 3, c = 6, b не определен Traceback (most recent call last): File «», line 1, in func(a=3, c=6) TypeError: func() takes at least 2 arguments (2 given)

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

>>> def func(*args): . return args . >>> func(1, 2, 3, ‘abc’) (1, 2, 3, ‘abc’) >>> func() () >>> func(1) (1,)

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

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

>>> def func(**kwargs): . return kwargs . >>> func(a=1, b=2, c=3) ‘a’: 1, ‘c’: 3, ‘b’: 2> >>> func() <> >>> func(a=’python’) ‘a’: ‘python’>

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

Анонимные функции, инструкция lambda¶

Анонимные функции могут содержать лишь одно выражение, но и выполняются они быстрее. Анонимные функции создаются с помощью инструкции lambda . Кроме этого, их не обязательно присваивать переменной, как делали мы инструкцией def func() :

>>> func = lambda x, y: x + y >>> func(1, 2) 3 >>> func(‘a’, ‘b’) ‘ab’ >>> (lambda x, y: x + y)(1, 2) 3 >>> (lambda x, y: x + y)(‘a’, ‘b’) ‘ab’

lambda-функции, в отличие от обычной, не требуется инструкция return , а в остальном, ведет себя точно так же:

>>> func = lambda *args: args >>> func(1, 2, 3, 4) (1, 2, 3, 4)

Встроенные функции, выполняющие преобразование типов¶

bool(x) преобразование к типу bool , использующая стандартную процедуру проверки истинности. Если х является ложным или опущен, возвращает значение False , в противном случае она возвращает True . bytearray([источник [, кодировка [ошибки]]]) преобразование к bytearray . Bytearray — изменяемая последовательность целых чисел в диапазоне 0≤X

Другие встроенные функции¶

abs(x) Возвращает абсолютную величину (модуль числа). all(последовательность) Возвращает True , если все элементы истинные (или, если последовательность пуста). any(последовательность) Возвращает True , если хотя бы один элемент — истина. Для пустой последовательности возвращает False . ascii(object) Как repr() , возвращает строку, содержащую представление объекта, но заменяет не-ASCII символы на экранированные последовательности. bin(x) Преобразование целого числа в двоичную строку. callable(x) Возвращает True для объекта, поддерживающего вызов (как функции). chr(x) Возвращает односимвольную строку, код символа которой равен x . classmethod(x) Представляет указанную функцию методом класса. compile(source, filename, mode, flags=0, dont_inherit=False) Компиляция в программный код, который впоследствии может выполниться функцией eval или exec . Строка не должна содержать символов возврата каретки или нулевые байты. delattr(object, name) Удаляет атрибут с именем name . dir([object]) Список имен объекта, а если объект не указан, список имен в текущей локальной области видимости. divmod(a, b) Возвращает частное и остаток от деления a на b . enumerate(iterable, start=0) Возвращает итератор, при каждом проходе предоставляющем кортеж из номера и соответствующего члена последовательности. eval(expression, globals=None, locals=None) Выполняет строку программного кода. exec(object[, globals[, locals]]) Выполняет программный код на Python. filter(function, iterable) Возвращает итератор из тех элементов, для которых function возвращает истину. format(value[,format_spec]) Форматирование (обычно форматирование строки). getattr(object, name ,[default]) извлекает атрибут объекта или default . globals() Словарь глобальных имен. hasattr(object, name) Имеет ли объект атрибут с именем name . hash(x) Возвращает хеш указанного объекта. help([object]) Вызов встроенной справочной системы. hex(х) Преобразование целого числа в шестнадцатеричную строку. id(object) Возвращает «адрес» объекта. Это целое число, которое гарантированно будет уникальным и постоянным для данного объекта в течение срока его существования. input([prompt]) Возвращает введенную пользователем строку. Prompt — подсказка пользователю. isinstance(object, ClassInfo) Истина, если объект является экземпляром ClassInfo или его подклассом. Если объект не является объектом данного типа, функция всегда возвращает ложь. issubclass(класс, ClassInfo) Истина, если класс является подклассом ClassInfo . Класс считается подклассом себя. iter(x) Возвращает объект итератора. len(x) Возвращает число элементов в указанном объекте. locals() Словарь локальных имен. map(function, iterator) Итератор, получившийся после применения к каждому элементу последовательности функции function . max(iter, [args . ] * [, key]) Максимальный элемент последовательности. min(iter, [args . ] * [, key]) Минимальный элемент последовательности. next(x) Возвращает следующий элемент итератора. oct(х) Преобразование целого числа в восьмеричную строку. open(file, mode=’r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True) Открывает файл и возвращает соответствующий поток. ord(с) Код символа. pow(x, y[, r]) Аналогично ( x ** y ) % r . reversed(object) Итератор из развернутого объекта. repr(obj) Представление объекта. print([object, . ], *, sep=» «, end=’n’, file=sys.stdout) Печать.

property(fget=None, fset=None, fdel=None, doc=None)

round(X [, N]) Округление до N знаков после запятой. setattr(объект, имя, значение) Устанавливает атрибут объекта. sorted(iterable[, key][, reverse]) Отсортированный список. staticmethod(function) Статический метод для функции. sum(iter, start=0) Сумма членов последовательности. super([тип [, объект или тип]]) Доступ к родительскому классу. type(object) Возвращает тип объекта. type(name, bases, dict) Возвращает новый экземпляр класса name . vars([object]) Словарь из атрибутов объекта. По умолчанию — словарь локальных имен. zip(*iters) Итератор, возвращающий кортежи, состоящие из соответствующих элементов аргументов-последовательностей.

Источник: py3dev.ru

Основы 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!»

Читайте также:
Gprs что это программа

В этом примере есть несколько нововведений. первое, что бросается в глаза — это строка документации (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 кстати, каков оптимальный объем «урока»? Что лучше — реже выходящие большие главы, или «лучше меньше да чаще».

Источник: habr.com

Функции Python

Основы

Автор Иван Душенко На чтение 17 мин Просмотров 2.2к. Опубликовано 27.11.2021

Одним из главных принципов программирования является принцип DRY – Don’t Repeat Yourself (не повторяйся). Этот принцип гласит: не стоит в разных местах кода использовать одинаковые блоки. Один из способов сделать это — использовать функции. Функция – это часть кода, которой присвоено имя и к этому коду можно обращаться из других частей программы по имени. Python, как всегда, даёт нам удобный инструментарий для реализации функционального программирования.

Определение

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

def capitalaizer(text): return text.capitalize()+’!’ var = capitalaizer(‘hello world’) print(var) # Вывод: Hello world!

Обратите внимание на ключевое слово def – оно необходимо для объявления функции. После def указывается имя, затем двоеточие, а следом идёт тело функции: последовательность инструкций, объединённая в один блок отступом слева.

В функции может быть использовано ключевое слово return – оно указывает какое значение передаётся программе, вызвавшей функцию. Если return не указано, то функция неявно возвращает None.

В примере выше именем функции является capitalaizer, а тело состоит всего из одной строки. В теле мы указали, что функция возвращает модифицированную переменную text, но можно было бы её переписать без использования return:

def capitalaizer(text): print(‘Печатаем внутри функции:’, end=’ ‘) print(text.capitalize()+’!’) var = capitalaizer(‘hello world’) print(‘Печатаем значение, возвращаемое функцией:’, end=’ ‘) print(var) print(‘и его тип:’, end=’ ‘) print(type(var)) # Вывод: Печатаем внутри функции: Hello world! Печатаем значение, возвращаемое функцией: None и его тип:

Как мы и говорили, функция вернула None, а модифицированная строка распечатана внутри функции. Такие функции называются «не чистыми» и часто являются признаком плохого кода.

Вызовы

Для вызова функции, которая возвращает переменную, нужно ввести:

capitalaizer(‘hello world’)

Для вызова функции, которая ничего не возвращает:
capitalaizer()

Особенности

Если функция очень короткая, то Пайтон позволяет записать её в одну строку:

def capitalaizer(text): return text.capitalize()+’!’

Но злоупотреблять таким стилем программирования не стоит. В среднем, работа программиста состоит на 10% из написания и на 90% из чтения своего и чужого кода. Одной из основ философии Питона является то, что код должен быть максимально удобочитаемым.
Да, любители писать всё в одну строку чаще всего сами создают себе сложности. Но когда же стоит использовать такой стиль? У меня есть однозначный ответ: при работе с консолью. Именно при работе в Python Shell приходится писать много кода вручную, и Вы его, скорее всего, не будете перечитывать. Именно поэтому языки, разработанные специально для консоли (Bash, PowerShell, .bat), так лаконичны.

Посмотрите на некоторые из их команд: cd .. ls -l.
Функции могут быть вложенными:

def capitalaizer(text): def add_volume(cap_text): return cap_text + ‘!’ return add_volume(text.capitalize()) var = capitalaizer(‘hello world’) print(var) # Вывод: Hello world!

Иногда без этого не обойтись, но лучше, по возможности, не использовать дополнительную вложенность – она усложняет код.

Инструкция return

Возврат значения

В среде программистов Вы можете часто встретить словосочетание «возвращает значение», но функция его ни откуда не заимствовала – почему же она его «возвращает»?

Чтобы это понять, надо разобраться, как устроен поток выполнения программы. В Пайтоне код выполняется строка за строкой. Но, когда в строке встречается имя функции, поток выполнения переходит в тело функции (вспомните, в самом начале мы говорили, что функция – это именованная область кода).

После выполнения тела функции, поток выполнения возвращается в то место, откуда была вызвана функция. При этом функция передаёт какое-то значение. Так что «функция возвращает значение» — лишь сокращение от «функция возвращает управление основному потоку выполнения программы и передаёт значение».

Возврат нескольких значений

Пока что функция возвращала только одно значение или не возвращала ничего (объект None). Существует возможность возвращать несколько значений. Для этого их надо перечислить через запятую:

Источник: pythoninfo.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru