Objek Kode

Objek kode merupakan detail tingkat rendah dari implementasi CPython. Masing-masing mewakili sekumpulan kode yang dapat dieksekusi dimana belum terikat ke fungsi.

type PyCodeObject

Struktur C dari objek yang digunakan untuk menggambarkan objek kode. Jenis dari tipe ini dapat berubah sewaktu-waktu.

PyTypeObject PyCode_Type

Ini adalah contoh dari PyTypeObject mewakili tipe Python code.

int PyCode_Check(PyObject *co)

Mengembalikan benar jika co adalah objek code. Fungsi ini selalu sukses.

int PyCode_GetNumFree(PyCodeObject *co)

Mengembalikan jumlah variabel bebas dalam co.

PyCodeObject *PyCode_New(int argcount, int kwonlyargcount, int nlocals, int stacksize, int flags, PyObject *code, PyObject *consts, PyObject *names, PyObject *varnames, PyObject *freevars, PyObject *cellvars, PyObject *filename, PyObject *name, int firstlineno, PyObject *lnotab)
Return value: New reference.

Mengembalikan objek kode baru. Jika Anda memerlukan objek kode dummy untuk membuat bingkai, gunakan :c: func:PyCode_NewEmpty sebagai gantinya. Memanggil PyCode_New() secara langsung dapat mengikat Anda ke versi Python yang tepat karena seringnya perubahan definisi bytecode.

PyCodeObject *PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount, int nlocals, int stacksize, int flags, PyObject *code, PyObject *consts, PyObject *names, PyObject *varnames, PyObject *freevars, PyObject *cellvars, PyObject *filename, PyObject *name, int firstlineno, PyObject *lnotab)
Return value: New reference.

Mirip dengan PyCode_New(), namun dengan tambahan "posonlyargcount" untuk argumen dengan posisi .

Baru pada versi 3.8.

PyCodeObject *PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno)
Return value: New reference.

Mengembalikan objek kode kosong baru dengan nama file yang ditentukan, nama fungsi, dan nomor baris pertama. Adalah ilegal untuk exec() atau :func:` eval` menghasilkan objek kode.

int PyCode_Addr2Line(PyCodeObject *co, int byte_offset)

Return the line number of the instruction that occurs on or before byte_offset and ends after it. If you just need the line number of a frame, use PyFrame_GetLineNumber() instead.

For efficiently iterating over the line numbers in a code object, use the API described in PEP 626.