Последние новости:

Поиск по сайту:

Многие чиновники стальному перу подобны (К. Прутков).

Python 3 — Функции

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
27.10.2017
Python 3 - Функции

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

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

 

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

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

  • Функциональные блоки начинаются с ключевым словом def следует имя функции и скобки (()).
  • Любые входные параметры или аргументы должны быть размещены в этих скобках. Вы также можете определить параметры внутри этих скобок.
  • Первый оператор функции может быть необязательным заявление — строкой документации функции или строкой документации.
  • Блочный код в пределах каждой функции начинается двоеточием (:) и с отступом.
  • Утверждение return [выражение] делает выход из функции, необязательно передавая обратно выражение для вызывающего. Ответное заявление без аргументов такого же, как возвратное none.

 

Синтаксис

def functionname( parameters ):
   "function_docstring"
   function_suite
   return [expression]

 

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

 

Пример

Следующая функция принимает строку в качестве входного параметра и выводит его на стандартный экран.

def printme( str ):
   "Это печатает переданную строку в эту функцию"
   print (str)
   return

 

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

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

После того, как основная структура функции завершена, вы можете выполнить его, вызвав его из другой функции или непосредственно из командной строки Python. Ниже приведен пример для вызова функции PrintMe():

#!/usr/bin/python3

# FЗдесь вызов функции
def printme( str ):
   "Это печатает переданную строку в эту функцию"
   print (str)
   return

# Теперь вы можете вызвать функцию printme
printme("Это первый вызов определяемой пользователем функции!")
printme("Опять второй вызов той же функции")

 

Когда этот код выполниться, он выведет следующий результат:

Это первый вызов определяемой пользователем функции!
Опять второй вызов той же функции

Передавать по ссылке против значения

Все параметры (аргументы) в языке Python передаются по ссылке. Это означает, что если вы измените то, к чему относится параметр в пределах функции, изменение также отражается в вызывающей функции. Например:

#!/usr/bin/python3

# Здесь определение функции
def changeme( mylist ):
   "Это изменяет переданный список в эту функцию"
   print ("Значения внутри функции перед изменением: ", mylist)
   mylist[2]=31
   print ("Значение внутри функции после изменения: ", mylist)
   return

# Теперь можно вызвать функцию changeme
mylist = [10,20,30]
changeme( mylist )
print ("Значения вне функции: ", mylist)

 

Здесь мы поддерживаем обращение переданного объекта и добавление значения в одном объекте. Таким образом, это будет производить следующий результат —

Значения внутри функции перед изменением:  [10, 20, 30]
Значение внутри функции после изменения:  [10, 20, 31]
Значения вне функции:  [10, 20, 31]

 

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

#!/usr/bin/python3

# Здесь определение функции
def changeme( mylist ):
   "Это изменяет список в этой функции"
   mylist = [1,2,3,4] # This would new reference in mylist
   print ("Значения внутри функции: ", mylist)
   return

# Теперь можно вызвать функцию changeme
mylist = [10,20,30]
changeme( mylist )
print ("Значения вне функции: ", mylist)

 

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

Значения внутри функции:  [1, 2, 3, 4]
Значения вне функции:  [10, 20, 30]

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

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

  • Необходимые аргументы
  • Ключевые аргументы
  • Аргументы по умолчанию
  • Аргументы переменной длины

 

Обязательные аргументы

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

Для вызова функции PrintMe(), вам обязательно нужно передать один аргумент, в противном случае она выдаст синтаксическую ошибку следующим образом:

#!/usr/bin/python3

# Здесь определение функции
def printme( str ):
   "Это печатает переданную строку в эту функцию"
   print (str)
   return

# Теперь вы можете вызвать функцию printme
printme()

 

Когда этот код выполниться, он выведет следующий результат:

Traceback (most recent call last):
   File "test.py", line 11, in <module>
      printme();
TypeError: printme() takes exactly 1 argument (0 given)

Ключевое слово аргумент

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

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

#!/usr/bin/python3

# Здесь определение функции
def printme( str ):
   "Это печатает переданную строку в эту функцию"
   print (str)
   return

# Теперь вы можете вызвать функцию printme
printme( str = "Моя строка")

 

Когда этот код выполниться, он выведет следующий результат:

Моя строка

 

Следующий пример дает более четкую картину. Обратите внимание, что порядок параметров не имеет значения.

#!/usr/bin/python3

# Здесь определение функции
def printinfo( name, age ):
   "Это печатает переданную информацию в эту функцию"
   print ("Имя: ", name)
   print ("Возраст ", age)
   return

# Теперь можно вызвать функцию printinfo
printinfo( age = 31, name = "AndreyEx" )

 

Когда этот код выполниться, он выведет следующий результат:

Имя:  AndreyEx
Возраст  31

Аргументы по умолчанию

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

#!/usr/bin/python3

# Здесь определение функции
def printinfo( name, age = 35 ):
   "Это печатает переданную информацию в эту функцию"
   print ("Name: ", name)
   print ("Age ", age)
   return

# Теперь можно вызвать функцию printinfo
printinfo( age = 31, name = "AndreyEx" )
printinfo( name = "AndreyEx" )

 

Когда этот код выполниться, он выведет следующий результат:

Имя:  AndreyEx
Возраст  31
Имя:  AndreyEx
Возраст  35

Аргументы переменной длины

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

Синтаксис для функции с не-ключевыми словами переменными аргументами приводятся ниже:

def functionname([formal_args,] *var_args_tuple ):
   "function_docstring"
   function_suite
   return [expression]

 

Звездочкой (*) ставится перед именем переменной, которая содержит значения всех nonkeyword переменных аргументов. Этот кортеж остается пустым, если никакие дополнительные аргументы не указаны при вызове функции. Ниже приведен простой пример:

#!/usr/bin/python3

# Здесь определение функции
def printinfo( arg1, *vartuple ):
   "Эта печать переменные аргументы"
   print ("Вывод: ")
   print (arg1)
   for var in vartuple:
      print (var)
   return

# Теперь можно вызвать функцию printinfo
printinfo( 10 )
printinfo( 70, 60, 31 )

 

Когда этот код выполниться, он выведет следующий результат:

Вывод:
10
Вывод:
70
60
31

Анонимная функция

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

  • Форма Lambda может принимать любое количество аргументов, но возвращать только одно значение в виде выражения. Они не могут содержать команды или несколько выражений.
  • Анонимная функция не может быть прямым вызовом для печати, потому что Lambda требует выражений.
  • Лямбда-функция имеет свои собственные локальное пространство имен и не может получить доступ к другим, чем в их списке параметров, и те, в глобальном пространстве имен переменных.
  • Хотя кажется, что Lambda являются разновидностью одной строки функции, они не эквивалентны встроенными операторов в C или C ++, чья цель состоит в том, чтобы стек распределялся путем передачи функции во время вызова по соображениям производительности.

Синтаксис

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

lambda [arg1 [,arg2,.....argn]]:expression

 

Ниже приведен пример, чтобы показать, как работает форма функции Lambda:

#!/usr/bin/python3

# Здесь определение функции
sum = lambda arg1, arg2: arg1 + arg2


# Теперь вы можете вызвать sum как функцию
print ("Общая стоимость : ", sum( 10, 20 ))
print ("Общая стоимость : ", sum( 20, 20 ))

 

Когда этот код выполниться, он выведет следующий результат:

Общая стоимость :  30
VОбщая стоимость :  40

Заявление return

Заявление return [выражение] выводит из функции, необязательно передавая обратно выражение для вызывающего. Ответное заявление без аргументов такое же, как возвратный none.

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

#!/usr/bin/python3

# Здесь определение функции
def sum( arg1, arg2 ):
   # Добавьте оба параметра и верните их."
   total = arg1 + arg2
   print ("Внутри функции : ", total)
   return total

# Теперь можно вызвать функцию sum
total = sum( 10, 20 )
print ("Вне функции : ", total )

 

Когда этот код выполниться, он выведет следующий результат:

Внутри функции :  30
Вне функции :  30

Область действия переменных

Все переменные в программе не могут быть доступны во всех местах, в этой программе. Это зависит от того, где вы объявили переменную.

Область видимости переменной определяет часть программы, где вы можете получить доступ к конкретному идентификатору. Есть две основные области видимости переменных в Python:

  • Глобальные переменные
  • Локальные переменные

Глобальные переменные против локальных переменных

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

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

#!/usr/bin/python3

total = 0 # Это глобальная переменная.
# Здесь определение функции
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2; # Здесь локальная переменная как глобальная.
   print ("Итого локально внутри функции : ", total)
   return total

# Теперь можно вызвать функцию sum
sum( 10, 20 )
print ("Итого глобально вне функции : ", total )

 

Когда этот код выполниться, он выведет следующий результат:

Итого локально внутри функции :  30
Итого глобально вне функции :  0

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

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

5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Статьи партнеров:

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить

Спасибо! Ваша заявка принята

close

Спасибо! Ваша заявка принята

close