حدد عالميًا في وحدة Python من A API
-
25-09-2019 - |
سؤال
أنا أقوم بتطوير وحدة النمط للبيثون باستخدام C API. كيف يمكنني إنشاء متغير يُنظر إليه على أنه عالمي من بيثون؟
على سبيل المثال ، إذا كانت الوحدة النمطية الخاصة بي module
, ، أريد إنشاء متغير g
هذا يفعل هذه الوظيفة:
import module
print module.g
خاصه، g
هو عدد صحيح.
حل من أليكس مارتيلي
PyObject *m = Py_InitModule("mymodule", mymoduleMethods);
PyObject *v = PyLong_FromLong((long) 23);
PyObject_SetAttrString(m, "g", v);
Py_DECREF(v);
المحلول
يمكنك استخدام pyobject_setattrstring في روتين تهيئة الوحدة النمطية ، مع الوسيطة الأولى o
يجري (الممثلون ل (PyObject*)
من) الوحدة النمطية الخاصة بك ، الحجة الثانية attr_name
كونه "G" ، الحجة الثالثة v
كونه متغير
PyObject *v = PyLong_FromLong((long) 23);
(أو أي قيمة أخرى بالطبع ، 23
هو مجرد مثال!-).
تذكر أن تكرم v
عقب ذلك مباشرة.
هناك طرق أخرى ، لكن هذه الطريقة بسيطة وعامة.
لا تنتمي إلى StackOverflow