Apakah ada cara untuk melihat bagaimana fungsi yang dibangun di dalam python? Maksud saya bukan hanya bagaimana menggunakannya, tetapi juga bagaimana mereka dibangun, apa kode di balik diurutkan atau menghitung dll ...?
Apakah ada cara untuk melihat bagaimana fungsi yang dibangun di dalam python? Maksud saya bukan hanya bagaimana menggunakannya, tetapi juga bagaimana mereka dibangun, apa kode di balik diurutkan atau menghitung dll ...?
Jawaban:
Karena Python adalah open source, Anda dapat membaca kode sumber .
Untuk mengetahui file apa modul atau fungsi tertentu diimplementasikan di Anda biasanya dapat mencetak __file__
atribut. Sebagai alternatif, Anda dapat menggunakan inspect
modul, lihat bagian Mengambil Kode Sumber dalam dokumentasi inspect
.
Untuk kelas dan metode bawaan, ini tidak semudah itu inspect.getfile
dan inspect.getsource
akan mengembalikan kesalahan tipe yang menyatakan bahwa objek tersebut built-in. Namun, banyak tipe bawaan dapat ditemukan di Objects
sub-direktori dari trunk sumber Python . Sebagai contoh, lihat di sini untuk implementasi kelas enumerate atau di sini untuk implementasi list
tipe.
sorted()
ada di /Python/bltinmodule.c meskipun hanya memanggilnya list.sort()
sehingga sumber aslinya ada di /Objects/listobject.c
Berikut ini adalah jawaban dari buku resep untuk melengkapi jawaban @Chris, CPython telah pindah ke GitHub dan repositori Mercurial tidak akan lagi diperbarui:
git clone https://github.com/python/cpython.git
Kode akan keluar ke subdirektori bernama cpython
->cd cpython
print()
...egrep --color=always -R 'print' | less -R
Python/bltinmodule.c
->builtin_print()
Nikmati.
Saya harus menggali sedikit untuk menemukan sumber berikut ini Built-in Functions
karena pencarian akan menghasilkan ribuan hasil. (Semoga berhasil mencari di antara mereka untuk menemukan sumbernya)
Lagi pula, semua fungsi tersebut didefinisikan dalam bltinmodule.c
Fungsi mulai denganbuiltin_{functionname}
Sumber Bawaan : https://github.com/python/cpython/blob/master/Python/bltinmodule.c
Untuk Jenis Bawaan: https://github.com/python/cpython/tree/master/Objects
listobject.c
github.com/python/cpython/tree/master/Objects
The iPython shell membuat ini mudah: function?
akan memberikan dokumentasi. function??
menunjukkan juga kodenya. TAPI ini hanya berfungsi untuk fungsi python murni.
Kemudian Anda selalu dapat mengunduh kode sumber untuk (c) Python.
Jika Anda tertarik pada implementasi pythonic dari fungsionalitas inti, silakan lihat sumber PyPy .
2 metode,
help()
inspect
1) memeriksa:
gunakan modul inpsect untuk menjelajahi kode yang Anda inginkan ... CATATAN: Anda dapat menjelajahi kode hanya untuk paket modul (alias) yang telah Anda impor
untuk misalnya:
>>> import randint
>>> from inspect import getsource
>>> getsource(randint) # here i am going to explore code for package called `randint`
2) bantuan ():
Anda cukup menggunakan help()
perintah untuk mendapatkan bantuan tentang fungsi builtin beserta kodenya.
untuk eg: jika Anda ingin melihat kode untuk str (), cukup ketik - help(str)
itu akan kembali seperti ini,
>>> help(str)
Help on class str in module __builtin__:
class str(basestring)
| str(object='') -> string
|
| Return a nice string representation of the object.
| If the argument is a string, the return value is the same object.
|
| Method resolution order:
| str
| basestring
| object
|
| Methods defined here:
|
| __add__(...)
| x.__add__(y) <==> x+y
|
| __contains__(...)
| x.__contains__(y) <==> y in x
|
| __eq__(...)
| x.__eq__(y) <==> x==y
|
| __format__(...)
| S.__format__(format_spec) -> string
|
| Return a formatted version of S as described by format_spec.
|
| __ge__(...)
| x.__ge__(y) <==> x>=y
|
| __getattribute__(...)
-- More --
Sumber daya yang tidak dikenal adalah Panduan Pengembang Python .
Dalam (agak) masalah GH terbaru , bab baru ditambahkan untuk menjawab pertanyaan yang Anda tanyakan: Tata Letak Kode Sumber CPython . Jika sesuatu berubah, sumber daya itu juga akan diperbarui.
Seperti yang disebutkan oleh @Jim, organisasi file dijelaskan di sini . Direproduksi untuk kemudahan penemuan:
Untuk modul Python, tata letak yang khas adalah:
Lib/<module>.py Modules/_<module>.c (if there’s also a C accelerator module) Lib/test/test_<module>.py Doc/library/<module>.rst
Untuk modul hanya ekstensi, tata letak yang khas adalah:
Modules/<module>module.c Lib/test/test_<module>.py Doc/library/<module>.rst
Untuk tipe bawaan, tata letak yang umum adalah:
Objects/<builtin>object.c Lib/test/test_<builtin>.py Doc/library/stdtypes.rst
Untuk fungsi bawaan, tata letak yang umum adalah:
Python/bltinmodule.c Lib/test/test_builtin.py Doc/library/functions.rst
Beberapa pengecualian:
builtin type int is at Objects/longobject.c builtin type str is at Objects/unicodeobject.c builtin module sys is at Python/sysmodule.c builtin module marshal is at Python/marshal.c Windows-only module winreg is at PC/winreg.c
enumerate
?