2017-08-28 5 views
-1

Dans l'exemple ci-dessous, je tente d'obtenir l'adresse de la variable m, mais il montre l'erreurerreur à obtenir l'adresse de la variable à l'aide ctypes.addressof en python

>>> import ctypes 
>>> m = 1 
>>> ctypes.addressof(m) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: invalid type 
>>> 
>>> 
>>> class A: 
...  pass 
... 
>>> 
>>> a = A() 
>>> 
>>> ctypes.addressof(a) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: invalid type 

Répondre

0

Vous pouvez obtenir l'adresse de la variable en utilisant la commande suivante :

id(m) 
#Example Output : 51148608 

pour obtenir l'aide de l'utilisation de style hexagonal:

hex(id(m)) 
#Output: 0x30c7740 
+2

à proprement parler, en utilisant 'id' pour trouver l'adresse est [* un détail de mise en œuvre CPython *] (https: //docs.python. org/3/library/functions.html # id). –

2

Qu'est-ce que vous avez passé à addressof n'est pas une variable, c'est un objet Python int dans le premier exemple et un objet A dans le second exemple. addressof ne fonctionne que sur ctypes _CData.

Je suggère de lire Facts and myths about Python names and values pour apprendre comment Python n'a pas le concept de "variable" que vous attendez.

0

ctypes.addressof ne peut obtenir l'adresse d'un type ctypes:

>>> from ctypes import * 
>>> m = c_int(1) 
>>> addressof(m) 
56017424 
+0

Comment puis-je obtenir l'adresse des objets de classe 'A()' ou la liste, – Kallz

+0

Dans CPython, id() le fait (mais ce n'est généralement pas garanti). Pourquoi essayez-vous de faire cela? –

+1

Cette adresse renvoyée par 'id()' dans CPython est un détail d'implémentation et est l'adresse d'une instance dérivée de PyObject. C'est une structure opaque donc l'utilité de l'adresse est suspecte. –