Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Функции в Python: Создание переиспользуемых модулей кода

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

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

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

Синтаксис определения

Правила определения функции:

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

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

Пример

Функция, принимающая строку и печатающая её:

def printme(str):
    "This prints a passed string into this function"
    print str
    return

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

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

Live Demo
#!/usr/bin/python
def printme(str):
    "This prints a passed string into this function"
    print str
    return

printme("I'm first call to user defined function!")
printme("Again second call to the same function")

Результат:

I'm first call to user defined function!
Again second call to the same function

Передача по ссылке vs по значению

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

Live Demo
#!/usr/bin/python
def changeme(mylist):
    "This changes a passed list into this function"
    mylist.append([1,2,3,4])
    print "Values inside the function: ", mylist
    return

mylist = [10,20,30]
changeme(mylist)
print "Values outside the function: ", mylist

Здесь мы сохраняем ссылку на переданный объект и добавляем значения в тот же объект. Результат:

Values inside the function: [10, 20, 30, [1, 2, 3, 4]]
Values outside the function: [10, 20, 30, [1, 2, 3, 4]]

Другой пример — когда ссылка перезаписывается внутри функции:

Live Demo
#!/usr/bin/python
def changeme(mylist):
    "This changes a passed list into this function"
    mylist = [1,2,3,4]  # Новая ссылка в mylist
    print "Values inside the function: ", mylist
    return

mylist = [10,20,30]
changeme(mylist)
print "Values outside the function: ", mylist

Параметр mylist локален для функции. Изменение mylist внутри не влияет на внешний mylist. Функция ничего не делает с оригиналом. Результат:

Values inside the function: [1, 2, 3, 4]
Values outside the function: [10, 20, 30]

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

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

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

Передаются в правильном позиционном порядке. Число аргументов при вызове должно точно совпадать с определением.

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

Live Demo
#!/usr/bin/python
def printme(str):
    "This prints a passed string into this function"
    print str
    return

printme()

Результат:

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

Именованные аргументы

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

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

Live Demo
#!/usr/bin/python
def printme(str):
    "This prints a passed string into this function"
    print str
    return

printme(str = "My string")

Результат:

My string

Порядок параметров не важен:

Live Demo
#!/usr/bin/python
def printinfo(name, age):
    "This prints a passed info into this function"
    print "Name: ", name
    print "Age ", age
    return

printinfo(age=50, name="miki")

Результат:

Name: miki
Age 50

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

Аргумент по умолчанию принимает значение, если в вызове не передано значение для него. Пример — печать возраста по умолчанию:

Live Demo
#!/usr/bin/python
def printinfo(name, age = 35):
    "This prints a passed info into this function"
    print "Name: ", name
    print "Age ", age
    return

printinfo(age=50, name="miki")
printinfo(name="miki")

Результат:

Name: miki
Age 50
Name: miki
Age 35

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

Иногда нужно обработать больше аргументов, чем указано в определении. Это variable-length arguments — не именованы в определении, в отличие от обязательных и дефолтных.

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

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

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

Live Demo
#!/usr/bin/python
def printinfo(arg1, *vartuple):
    "This prints a variable passed arguments"
    print "Output is: "
    print arg1
    for var in vartuple:
        print var
    return

printinfo(10)
printinfo(70, 60, 50)

Результат:

Output is: 10
Output is: 70 60 50

Анонимные функции (lambda)

Называются анонимными, так как не объявляются через def. Ключевое слово lambda создаёт маленькие анонимные функции.

Синтаксис lambda

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

Пример работы lambda:

Live Demo
#!/usr/bin/python
sum = lambda arg1, arg2: arg1 + arg2
print "Value of total : ", sum(10, 20)
print "Value of total : ", sum(20, 20)

Результат:

Value of total : 30
Value of total : 40

Оператор return

return [expression] завершает функцию, опционально возвращая значение. return без аргументов = return None.

Пример возврата значения:

Live Demo
#!/usr/bin/python
def sum(arg1, arg2):
    total = arg1 + arg2
    print "Inside the function : ", total
    return total

total = sum(10, 20)
print "Outside the function : ", total

Результат:

Inside the function : 30
Outside the function : 30

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

Не все переменные доступны во всех местах программы. Это зависит от места объявления.

Область видимости (scope) определяет часть программы, где доступен идентификатор. Два основных типа:

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

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

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

Live Demo
#!/usr/bin/python
total = 0  # глобальная переменная

def sum(arg1, arg2):
    total = arg1 + arg2  # здесь total — локальная
    print "Inside the function local total : ", total
    return total

sum(10, 20)
print "Outside the function global total : ", total

Результат:

Inside the function local total : 30
Outside the function global total : 0

Python

  1. Lambda-функции в Python: практическое руководство по анонимным функциям
  2. Генераторы в Python: эффективная итерация и продвинутые сценарии
  3. Замыкания в Python: как вложенные функции захватывают переменные
  4. Декораторы в Python: улучшайте функции экспертными техниками
  5. 10 ключевых функций Insight для оптимизации FDM-печати на Stratasys
  6. Функции в C++: подробное объяснение с практическими примерами кода
  7. Мастерство метода strip() в Python: подробное руководство и практические примеры
  8. Освоение лямбда-функций Python: практические примеры и лучшие практики
  9. Функция abs() в Python: вычисление абсолютных значений для чисел и комплексных чисел
  10. Функция round() в Python: подробное объяснение с практическими примерами