20 дек. 2000 г.

Ввведение в программирование на Python (для детей) урок 12

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

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

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

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

Если записать в 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 # Почему с переменной не связано никакого значения? 
>>>