Что в Python означает «функция в ...»?
8382 просмотра
4 ответа
Что <function at 'somewhere'>
значит? Пример:
>>> def main():
... pass
...
>>> main
<function main at 0x7f95cf42f320>
А может есть способ как-то получить к нему доступ с помощью 0x7f95cf42f320
?
Ответы (4)
10 плюса
Вы смотрите на представление по умолчанию функционального объекта. Он предоставляет вам имя и уникальный идентификатор, который в CPython случается быть адресом памяти.
Вы не можете получить к нему доступ по адресу; адрес памяти используется только для того, чтобы помочь вам различать функциональные объекты.
Другими словами, если у вас есть два функциональных объекта, которые были изначально названы main
, вы все равно можете увидеть, что они разные:
>>> def main(): pass
...
>>> foo = main
>>> def main(): pass
...
>>> foo is main
False
>>> foo
<function main at 0x1004ca500>
>>> main
<function main at 0x1005778c0>
Автор: Martijn Pieters
Размещён: 12.10.2013 11:25
3 плюса
Это идентификатор функции , в реализации CPython это адрес объекта в памяти.
Автор: aga Размещён: 12.10.2013 11:252 плюса
Каждый объект obj имеет метод obj .__ repr __ ().
При вызове этот метод возвращает строковый объект, который является «официальным» печатаемым представлением объекта obj.
Когда интерпретатор Python встречает
строку print obj
в скрипте
или >>> obj
в командной строке, вызывается
метод __ repr __ () объекта, и значение возвращаемой репрезентативной строки отображается на экране.
В частности, метод __ repr __ () объекта можно вызвать с помощью встроенной функции repr () с именем объекта в качестве аргумента, чтобы присвоить строку, возвращаемую __ repr __ (), идентификатору, что позволяет выполнить операции над этим представлением.
Только в Python 1 и Python 2 обратные кавычки вокруг имени объекта имеют тот же эффект, что и вызов repr () для него.
Для сравнения:
def main():
pass
if '__repr__' in dir(main):
print ('__repr__ is a method of main\n')
else:
print ('main has no method __repr__\n')
print ('main : %s\n'
'type(main) == %s\n'
% (main,type(main)) )
print ('repr(main) : %s\n'
'type(repr(main)) == %s'
%(repr(main),type(repr(main))) )
# Only in Python 1 and Python 2, string conversions with
# reversed quotes produce the same result as repr():
print ('\n`main` : %s\n'
'type(`main`) == %s'
% (`main`,type(`main`)) )
результат
__repr__ is a method of main
main : <function main at 0x00FB2930>
type(main) == <type 'function'>
repr(main) : <function main at 0x00FB2930>
type(repr(main)) == <type 'str'>
,
В <function main at 0x00FB2930>
, часть 0x00FB2930
представляет адрес памяти объекта (здесь функция), то есть целое число, которое ссылается на местоположение объекта в RAM.
0x00FB2930
является шестнадцатеричным , то есть литералом, представляющим значение адреса памяти в базе 16.
Этот адрес памяти точно возвращается встроенной функцией id()
, значение которой печатается в виде десятичного целочисленного литерала, то есть его представления в базе 10.
print ('repr(main) : %s\n'
'type(repr(main)) == %s\n'
% (repr(main),
type(repr(main))) )
hex_address = repr(main)[18:-1]
print ('hex_address = repr(main)[18:-1] defined\n'
'hex_address : %s\n'
'type(hex_address) == %s\n'
'int(hex_address , 16) : %s\n'
'type(int(hex_address , 16)) : %s\n'
% (hex_address,
type(hex_address),
int(hex_address , 16),
type(int(hex_address , 16))) )
print ('id(main) : %s\n'
'type(id(main)) == %s\n'
'hex(id(main) : %s\n'
'type(hex(id(main)) : %s'
% (id(main),
type(id(main)),
hex(id(main)),
type(hex(id(main)))) )
результат
repr(main) : <function main at 0x00FB2930>
type(repr(main)) == <type 'str'>
hex_address = repr(main)[18:-1] defined
hex_address : 0x00FB2930
type(hex_address) == <type 'str'>
int(hex_address , 16) : 16460080
type(int(hex_address , 16)) : <type 'int'>
id(main) : 16460080
type(id(main)) == <type 'int'>
hex(id(main) : 0xfb2930
type(hex(id(main)) : <type 'str'>
Автор: eyquem
Размещён: 12.10.2013 01:16
1 плюс
В CPython это просто адрес объекта в памяти. Все объекты имеют это, не только функции.
Автор: Games Brainiac Размещён: 12.10.2013 11:30Вопросы из категории :
- python Обработка XML в Python
- python Как я могу использовать Python itertools.groupby ()?
- python Python: На какой ОС я работаю?
- python Как я могу создать непосредственно исполняемое кроссплатформенное приложение с графическим интерфейсом на Python?
- python Вызов функции модуля с использованием его имени (строки)
- function Как вы передаете функцию в качестве параметра в C?
- function Как работают закрытия JavaScript?
- function Есть ли в Python функция для разбиения слова на список?
- function Что предпочтительнее использовать в Python: лямбда-функции или вложенные функции ('def')?
- function Есть ли лучший способ сделать необязательные параметры функции в JavaScript?
- memory-address Как использовать таблицу страниц для преобразования виртуального адреса в физический?
- memory-address Почему адрес данных char не отображается?
- memory-address Как напечатать переменные адреса в C?
- memory-address Выполнение ассемблерного кода с помощью Python
- memory-address Почему 8086 использует дополнительный регистр для адресации 1 МБ памяти?
- repr Difference between __str__ and __repr__?
- repr Что в Python означает «функция в ...»?
- repr Выходная разница между ipython и python
- repr Почему обратные слеши появляются дважды?
- repr Юникод Python против UTF-8