Параметры и аргументы функций. Локальные и глобальные переменные. Урок 14

Основы программирования на Python

Параметры и аргументы функций

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

Аргументы и параметры: передача данных в функцию

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

Локальные и глобальные переменные

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

>>> def mathem(a,b):
	a = a/2
	b = b+10
	print(a+b)
 
>>> num1 = 100
>>> num2 = 12
>>> mathem(num1,num2)
72.0
>>> num1
100
>>> num2
12
>>> a
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    a
NameError: name 'a' is not defined
>>> b
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    b
NameError: name 'b' is not defined
>>> 

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

А вот переменных a и b оказывается нет и в помине (ошибка "name 'b' is not defined" переводится как "переменная b не определена"). Эти переменные существуют лишь в момент выполнения функции и называются локальными. В противовес им, переменные num1 и num2 видны не только во внешней ветке, но и внутри функции:

>>> def mathem2():
	print(num1+num2)
 
>>> mathem2()
112
>>> 

Переменные, определенные в основной ветке программы, являются глобальными.

Практическая работа

1. Создайте функцию:

def func1(num):
	n = num * 5
 	print (n)

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

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

>>> def func(n):
	if n < 3:
		n = n*10
 
>>> a = 2
>>> b = func(a)
>>> a
2
>>> b # Почему с переменной не связано никакого значения? 
>>> 

Подскажите как значение

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

Через команду return.

Через команду return. Пример:

>>> a = 1
>>> def fff():
...     return 10
... 
>>> a = fff()
>>> a
10

Через обращение к глобальной переменной:

>>> b = 1
>>> def kkk():
...     global b
...     b = 10
... 
>>> kkk()
>>> b
10

А как вернуть несколько

А как вернуть несколько значений если у функции 1 параметр? Только с помощью global?

def func1(num): n = num * 5

def func1(num):
	n = num * 5 "Разве num не локальная переменная? Если локальная, то она существует только во время выполнения функции. Если это так, то я не понимаю задания 14.1" 
 	print (n) 

хм...а действительно, почему?

>>> b # Почему с
переменной не
связано никакого
значения?

почему? не пойму, обьясните!

Фукнция ничего не

Фукнция ничего не возвращает.
Должно быть примерно так:

def func(n):
    if n<3:
        n=n*10
    return n