Б41 Чистый Python. Тонкости программирования для профи. Спб.: Питер



Download 6,94 Mb.
Pdf ko'rish
bet24/80
Sana24.02.2022
Hajmi6,94 Mb.
#212875
1   ...   20   21   22   23   24   25   26   27   ...   80
Bog'liq
978544610803 Chisty Python Tonko

'ПРИВЕТ!'
Функции — это объекты
Все данные в программе Python представляются объектами или связями 
между объектами
1
. Символьные последовательности (строки), списки, 
модули и функции — все эти явления языка представляют собой объекты. 
Что касается функций, то в Python они ничем не отличаются. Они — тоже 
объекты.
Поскольку функция 
yell
в Python является объектом, вы можете ее при-
своить еще одной переменной, точно так же, как это происходит с любым 
другим объектом:
>>> bark = yell
Эта строка кода не вызывает функцию. Она берет объект-функцию, на 
который ссылается имя 
yell
, и создает второе имя, 
bark
, которое на него 
указывает. Теперь вы можете исполнить тот же самый объект-функцию, 
который лежит в его основе, вызвав 
bark
:
>>> bark('гав') 
'ГАВ!'
Объекты-функции и их имена — это две отдельные компетенции. Вот еще 
одно доказательство. Вы можете удалить первоначальное имя функции 
(
yell
), и, поскольку еще одно имя (
bark
) по-прежнему указывает на ле-
жащую в основе функцию, вы все так же можете через него вызвать эту 
функцию:
1
См. документацию Python «Объекты, значения и типы»: 
https://docs .python .org/3/reference/
datamodel .html#objects-values-and-types


68 Глава 3 • Эффективные функции
>>> del yell
>>> yell('Привет?') 
NameError: "name 'yell' is not defined" 
>>> bark('эй') 
'ЭЙ!'
Кстати, Python прикрепляет к каждой функции строковый идентифи-
катор. Это делается для отладочных целей во время создания функции. 
К этому внутреннему идентификатору можно получить доступ посред-
ством атрибута 
__name__
1
:
>>> bark.__name__ 
'yell'
Нужно сказать, что хотя атрибут 
__name__
функции по-прежнему «yell», 
это не влияет на то, каким образом вы получаете доступ к объекту-функ-
ции из вашего программного кода. Идентификатор имени является просто 
средством отладки. Указывающая на функцию переменная и сама функция 
обладают совершенно разными компетенциями.
Функции могут храниться в структурах данных
Поскольку функции — это объекты первого класса, их можно хранить 
в структурах данных точно так же, как это делается с другими объектами. 
Например, вы можете добавить функции в список:
>>> funcs = [bark, str.lower, str.capitalize] 
>>> funcs 
[,
,
]
1
Начиная с Python 3.3, также имеется атрибут 
__qualname__
, который служит для такой 
же цели и обеспечивает строку с квалифицированным именем для устранения неодно-
значности между именами функций и классов (см. PEP 3155: 
https://www .python .org/dev/
peps/pep-3155/
).


3 .1 . Функции Python — это объекты первого класса 69
Доступ к объектам-функциям, хранящимся внутри списка, осуществля-
ется точно так же, как это происходит с объектом любого другого типа:
>>> for f in funcs:
... print(f, f('всем привет'))
'ВСЕМ ПРИВЕТ!'
'всем привет'
'Всем привет'
Хранящийся в списке объект-функцию даже можно вызвать без необходи-
мости сначала присваивать его переменной. Для этого можно выполнить 
поиск и затем немедленно назвать результирующий «бестелесный» объ-
ект-функцию внутри одного-единственного выражения:
>>> funcs[0]('приветище') 

Download 6,94 Mb.

Do'stlaringiz bilan baham:
1   ...   20   21   22   23   24   25   26   27   ...   80




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish