2010-06-08 4 views
3

Je développe un module pour Python en utilisant une API C. Comment puis-je créer une variable considérée comme globale à partir de Python?Définir un global dans un module Python à partir d'une API C

Par exemple, si mon module est module, je veux créer une g variable qui fait ce travail:

import module 
print module.g 

En particulier, g est un entier.

Solution de Alex Martelli

PyObject *m = Py_InitModule("mymodule", mymoduleMethods); 
PyObject *v = PyLong_FromLong((long) 23); 

PyObject_SetAttrString(m, "g", v); 
Py_DECREF(v); 

Répondre

3

Vous pouvez utiliser PyObject_SetAttrString dans votre routine d'initialisation du module, avec le premier argument o étant (la distribution à (PyObject*) de) votre module, le deuxième argument attr_name étant "g", troisième argument v étant une variable

PyObject *v = PyLong_FromLong((long) 23); 

(ou tout autre valeur bien sûr, 23 est juste un exemple -). N'oubliez pas de décréf v par la suite.

Il existe d'autres façons, mais celle-ci est simple et générale.

+0

merci, pouvez-vous vérifier la solution complète que je signale dans la question? –

+0

@wiso, oui, ces 4 lignes étaient exactement ce que j'avais en tête (sauf que vous appelez l'attribut "L" dans l'édition et c'est "g" ci-dessus dans la question originale, mais c'est sans doute juste un oubli). –

Questions connexes