क्या यह देखने का एक तरीका है कि कैसे कार्यों में बनाया गया अजगर में काम करता है? मेरा मतलब यह नहीं है कि उनका उपयोग कैसे किया जाए, बल्कि यह भी कि वे कैसे बनाए गए थे, क्रमबद्ध या प्रगणित आदि के पीछे क्या कोड है ...?
क्या यह देखने का एक तरीका है कि कैसे कार्यों में बनाया गया अजगर में काम करता है? मेरा मतलब यह नहीं है कि उनका उपयोग कैसे किया जाए, बल्कि यह भी कि वे कैसे बनाए गए थे, क्रमबद्ध या प्रगणित आदि के पीछे क्या कोड है ...?
जवाबों:
चूंकि पायथन खुला स्रोत है आप स्रोत कोड पढ़ सकते हैं ।
यह पता लगाने के लिए कि किसी विशेष मॉड्यूल या फ़ंक्शन को किस फ़ाइल में लागू किया गया है, आप आमतौर पर __file__
विशेषता को प्रिंट कर सकते हैं । वैकल्पिक रूप से, आप inspect
मॉड्यूल का उपयोग कर सकते हैं , दस्तावेज़ीकरण में स्रोत कोड पुनर्प्राप्त कर रहा है inspect
।
अंतर्निहित कक्षाओं और विधियों के लिए यह इतना सीधा नहीं है inspect.getfile
और inspect.getsource
एक प्रकार की त्रुटि बताएगा कि ऑब्जेक्ट अंतर्निहित है। हालाँकि, कई अंतर्निहित प्रकार Objects
पायथन स्रोत ट्रंक की उप-निर्देशिका में पाए जा सकते हैं । उदाहरण के लिए, को देखने के लिए यहाँ की गणना वर्ग के कार्यान्वयन के लिए या यहां के कार्यान्वयन के लिए list
लिखें।
sorted()
में है /Python/bltinmodule.c हालांकि यह सिर्फ कॉल list.sort()
तो असली स्रोत में है /Objects/listobject.c
यहाँ @Chris के उत्तर को पूरक करने के लिए एक कुकबुक उत्तर दिया गया है , सीपीथॉन गीथहब में स्थानांतरित हो गया है और मर्क्यूरियल रिपॉजिटरी को अब अपडेट नहीं किया जाएगा:
git clone https://github.com/python/cpython.git
कोड एक उपनिर्देशिका को चेकआउट करेगा cpython
->cd cpython
print()
...egrep --color=always -R 'print' | less -R
Python/bltinmodule.c
->builtin_print()
का आनंद लें।
मुझे निम्नलिखित के स्रोत को खोजने के लिए थोड़ा खोदना पड़ा Built-in Functions
क्योंकि खोज से हजारों परिणाम निकलेंगे। (यह कहाँ है स्रोत है खोजने के लिए उनमें से किसी के लिए खोज सौभाग्य)
वैसे भी, उन सभी कार्यों को bltinmodule.c
कार्य के साथ परिभाषित किया गया हैbuiltin_{functionname}
अंतर्निहित स्रोत: https://github.com/python/cpython/blob/master/Python/bltinmodule.c
बिल्ट-इन प्रकारों के लिए: https://github.com/python/cpython/tree/master/Objects
listobject.c
github.com/python/cpython/tree/master/Objects
IPython : खोल इस आसान बना देता है function?
आप प्रलेखन दे देंगे। function??
कोड भी दिखाता है। लेकिन यह केवल शुद्ध अजगर कार्यों के लिए काम करता है।
तब आप हमेशा (सी) पायथन के लिए स्रोत कोड डाउनलोड कर सकते हैं ।
यदि आप मुख्य कार्यक्षमता के पायथोनिक कार्यान्वयन में रुचि रखते हैं, तो PyPy स्रोत पर एक नज़र है ।
2 विधियाँ,
help()
inspect
1) निरीक्षण:
आप चाहते हैं कोड का पता लगाने के लिए सबसे ऊपर मॉड्यूल का उपयोग करें ... नोट: आप केवल आयात किए गए मॉड्यूल (उर्फ) पैकेज के लिए कोड का पता लगाने में सक्षम हो सकते हैं
उदाहरण के लिए:
>>> import randint
>>> from inspect import getsource
>>> getsource(randint) # here i am going to explore code for package called `randint`
2) मदद ():
आप बस help()
कमांड के साथ-साथ इसके कोड के बारे में मदद पाने के लिए कमांड का उपयोग कर सकते हैं ।
उदाहरण के लिए: यदि आप str के लिए कोड देखना चाहते हैं (), बस टाइप करें - help(str)
यह इस तरह वापस आ जाएगा,
>>> 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 --
काफी अज्ञात संसाधन पायथन डेवलपर गाइड है ।
कुछ (कुछ हद तक) हाल के जीएच मुद्दे में , आपके द्वारा पूछे जा रहे प्रश्न को संबोधित करने के लिए एक नया अध्याय जोड़ा गया: सीपीथॉन सोर्स कोड लेआउट । अगर कुछ बदलना चाहिए, तो वह संसाधन भी अपडेट हो जाएगा।
जैसा @ जिम ने उल्लेख किया है, फ़ाइल संगठन यहाँ वर्णित है । खोज में आसानी के लिए पुन: प्रस्तुत:
पायथन मॉड्यूल के लिए, विशिष्ट लेआउट है:
Lib/<module>.py Modules/_<module>.c (if there’s also a C accelerator module) Lib/test/test_<module>.py Doc/library/<module>.rst
केवल-एक्सटेंशन मॉड्यूल के लिए, विशिष्ट लेआउट है:
Modules/<module>module.c Lib/test/test_<module>.py Doc/library/<module>.rst
बिलियन प्रकारों के लिए, विशिष्ट लेआउट है:
Objects/<builtin>object.c Lib/test/test_<builtin>.py Doc/library/stdtypes.rst
अंतर्निहित कार्यों के लिए, विशिष्ट लेआउट है:
Python/bltinmodule.c Lib/test/test_builtin.py Doc/library/functions.rst
कुछ अपवाद:
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
?