Главная страница

Язык Python. Уроки Python. Python Lessons Oleg Kishinskii мар. 30


Скачать 406.31 Kb.
НазваниеPython Lessons Oleg Kishinskii мар. 30
АнкорЯзык Python
Дата09.12.2022
Размер406.31 Kb.
Формат файлаdocx
Имя файлаУроки Python.docx
ТипДокументы
#835711
страница8 из 9
1   2   3   4   5   6   7   8   9

Функции языка Python



Функции – это многократно используемые фрагменты программы. Они позволяют дать имя опреде- лённому блоку команд с тем, чтобы впоследствии запускать этот блок по указанному имени в любом месте программы и сколь угодно много раз. Это называется вызовом функции. Мы уже использовали много встроенных функций, как то len и range.

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


def sayHello():

print('Привет, Мир!') #блок, принадлежащийфункции #Конецфункции
sayHello() #вызовфункции

sayHello() #ещёодинвызовфункции

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

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


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


def printMax(a, b): if a > b:

print(a, 'максимально') elif a == b:

print(a, 'равно', b) else:

print(b, 'максимально')

printMax(3, 4) #прямаяпередачазначений

x = 5

y = 7

printMax(x, y) #передачапеременныхвкачествеаргументов

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

      1. Локальные переменные



x= 50

def func(x):

print('x равен', x) x = 2

print('Замена локального x на', x)

func(x)

print('x по-прежнему', x)

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

      1. Зарезервированное слово “global”


Чтобы присвоить некоторое значение переменной, определённой на высшем уровне программы (т.е. не в какой-либо области видимости, как то функции или классы), необходимо указать Python, что её имя не локально, а глобально (global). Сделаем это при помощи зарезервированного слова global. Без при- менения зарезервированного слова global невозможно присвоить значение переменной, определённой за пределами функции.

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


x = 50

def func():

global x
print('x равно', x) x = 2

print('Заменяем глобальное значение x на', x)

func()

print('Значение x составляет', x)

не приветствуется, и его следует избегать, поскольку человеку, читающему текст программы, будет непонятно, где находится объявление переменной. Использование зарезервированного слова global до- статочно ясно показывает, что переменная объявлена в самом внешнем блоке.

      1. Зарезервированное слово “nonlocal”


Мы увидели, как получать доступ к переменным в локальной и глобальной области видимости. Есть ещё один тип области видимости, называемый “нелокальной” (nonlocal) областью видимости, который представляет собой нечто среднее между первыми двумя. Нелокальные области видимости встреча- ются, когда вы определяете функции внутри функций.


def func_outer(): x = 2

print('x равно', x)
def func_inner(): nonlocal x

x = 5

func_inner()

print('Локальное x сменилось на', x)

func_outer()

Поскольку в Python всё является выполнимым кодом, вы можете определять функции где угодно.

      1. Значения аргументов по умолчанию


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


def say(message, times = 1): print(message * times)

say('Привет')

say('Мир', 5)

Обратите внимание, что значение по умолчанию должно быть константой. Или точнее говоря, оно должно быть неизменным[1] – это объясняется подробнее в последующих главах. А пока запомните это.



Предупреждение: Важно Значениями по умолчанию могут быть снабжены только параметры, находящиеся в конце списка параметров. Таким образом, в списке параметров функции параметр со значением по умолчанию не может предшествовать параметру без значения по умолчанию. Это связано с тем, что значения присваиваются параметрам в соответствии с их положением. Например, def func(a, b=5) допустимо, а def func(a=5, b) не допустимо.


      1. Ключевые аргументы


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


def func(a, b=5, c=10):

print('a равно', a, ', b равно', b, ', а c равно', c)
func(3, 7) func(25, c=24) func(c=50, a=100)

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

      1. Переменное число параметров



def total(a=5, *numbers, **phonebook): print('a', a)
#проходповсемэлементамкортежа

for single_item in numbers: print('single_item', single_item)
#проходповсемэлементамсловаря

for first_part, second_part in phonebook.items(): print(first_part,second_part)

print(total(10,1,2,3,Jack=1123,John=2231,Inge=1560))

Иногда бывает нужно определить функцию, способную принимать любое число параметров. Этого можно достичь при помощи звёздочек (сохраните как function_varargs.py):

      1. Только ключевые параметры



def total(initial=5, *numbers, extra_number): count = initial

for number in numbers: count += number

count += extra_number print(count)

total(10, 1, 2, 3, extra_number=50)

total(10, 1, 2, 3)

#Вызоветошибку,посколькумынеуказализначение

#аргументапоумолчаниюдля'extra_number'.

Если некоторые ключевые параметры должны быть доступны только по ключу, а не как позиционные аргументы, их можно объявить после параметра со звёздочкой (сохраните как keyword_only.py):

      1. Оператор “return”



#!/usr/bin/python

#Filename:func_return.py
def maximum(x, y): if x > y:

return x elif x == y:

return 'Числа равны.' else:

return y

print(maximum(2, 3))

Оператор return используется для возврата[5] из функции, т.е. для прекращения её работы и выхода из неё. При этом можно также вернуть некоторое значение из функции.

      1. Строки документации


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


def printMax(x, y):

'''Выводитмаксимальноеиздвухчисел.
Обазначениядолжныбытьцелымичислами.'''

x = int(x) #конвертируемвцелые,есливозможно

y = int(y)

if x > y:

print(x, 'наибольшее') else:

print(y, 'наибольшее')
(continues on next page)


printMax(3, 5) print(printMax.doc)

(продолжение с предыдущей страницы)

    1. 1   2   3   4   5   6   7   8   9


написать администратору сайта