अंतर्निहित पायथन कार्यों के लिए स्रोत कोड ढूँढना?


142

क्या यह देखने का एक तरीका है कि कैसे कार्यों में बनाया गया अजगर में काम करता है? मेरा मतलब यह नहीं है कि उनका उपयोग कैसे किया जाए, बल्कि यह भी कि वे कैसे बनाए गए थे, क्रमबद्ध या प्रगणित आदि के पीछे क्या कोड है ...?

जवाबों:


135

चूंकि पायथन खुला स्रोत है आप स्रोत कोड पढ़ सकते हैं ।

यह पता लगाने के लिए कि किसी विशेष मॉड्यूल या फ़ंक्शन को किस फ़ाइल में लागू किया गया है, आप आमतौर पर __file__विशेषता को प्रिंट कर सकते हैं । वैकल्पिक रूप से, आप inspectमॉड्यूल का उपयोग कर सकते हैं , दस्तावेज़ीकरण में स्रोत कोड पुनर्प्राप्त कर रहा है inspect

अंतर्निहित कक्षाओं और विधियों के लिए यह इतना सीधा नहीं है inspect.getfileऔर inspect.getsourceएक प्रकार की त्रुटि बताएगा कि ऑब्जेक्ट अंतर्निहित है। हालाँकि, कई अंतर्निहित प्रकार Objectsपायथन स्रोत ट्रंक की उप-निर्देशिका में पाए जा सकते हैं । उदाहरण के लिए, को देखने के लिए यहाँ की गणना वर्ग के कार्यान्वयन के लिए या यहां के कार्यान्वयन के लिए listलिखें।


क्या आप एक उदाहरण दे सकते हैं enumerate?
बेंजामिन

ओपी के बाद, "सॉर्ट किए गए" के लिए स्रोत कोड के बारे में कैसे? बेशक, निरीक्षण .getourcefile (हल) काम नहीं करता है।
क्वेटज़ालकोट

2
के लिए स्रोत कोड @Quetzalcoatl sorted()में है /Python/bltinmodule.c हालांकि यह सिर्फ कॉल list.sort()तो असली स्रोत में है /Objects/listobject.c
बोरिस

35

यहाँ @Chris के उत्तर को पूरक करने के लिए एक कुकबुक उत्तर दिया गया है , सीपीथॉन गीथहब में स्थानांतरित हो गया है और मर्क्यूरियल रिपॉजिटरी को अब अपडेट नहीं किया जाएगा:

  1. यदि आवश्यक हो तो Git स्थापित करें।
  2. git clone https://github.com/python/cpython.git

  3. कोड एक उपनिर्देशिका को चेकआउट करेगा cpython->cd cpython

  4. मान लीजिए कि हम परिभाषा की तलाश कर रहे हैं print()...
  5. egrep --color=always -R 'print' | less -R
  6. अहा! देखें Python/bltinmodule.c->builtin_print()

का आनंद लें।


22

यहां छवि विवरण दर्ज करें

मुझे निम्नलिखित के स्रोत को खोजने के लिए थोड़ा खोदना पड़ा 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


1
एक सूची एक वस्तु / प्रकार है, एक बेसिन फ़ंक्शन नहीं है। आप इसके लिए कार्यान्वयन विवरण listobject.c github.com/python/cpython/tree/master/Objects
user1767754

19

IPython : खोल इस आसान बना देता है function?आप प्रलेखन दे देंगे। function??कोड भी दिखाता है। लेकिन यह केवल शुद्ध अजगर कार्यों के लिए काम करता है।

तब आप हमेशा (सी) पायथन के लिए स्रोत कोड डाउनलोड कर सकते हैं ।

यदि आप मुख्य कार्यक्षमता के पायथोनिक कार्यान्वयन में रुचि रखते हैं, तो PyPy स्रोत पर एक नज़र है ।


1
PyPy अधिकांश निर्मित सामानों के लिए RPython का उपयोग करता है, जो कि निम्न-स्तर के रूप में C से लगभग उच्च-स्तर तक Python के रूप में हो सकता है। आमतौर पर यह बीच में है। या तो मामले में यह सांख्यिकीय रूप से टाइप किया गया है, इसलिए यह वास्तव में अजगर नहीं है।

2
एक बेसिन फ़ंक्शन के स्रोत कोड को देखने के लिए एक प्रारंभिक परियोजना देखें: github.com/punchagan/cinspect
थॉमस

8

2 विधियाँ,

  1. आप स्निपेट का उपयोग करके उपयोग की जांच कर सकते हैं help()
  2. आप उन मॉड्यूल का उपयोग करके छिपे हुए कोड की जांच कर सकते हैं 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  --

4
ओपी विशेष रूप से कोड को देखना चाहता है, मदद केवल प्रलेखन देती है।
0xc0de सेप

6

काफी अज्ञात संसाधन पायथन डेवलपर गाइड है

कुछ (कुछ हद तक) हाल के जीएच मुद्दे में , आपके द्वारा पूछे जा रहे प्रश्न को संबोधित करने के लिए एक नया अध्याय जोड़ा गया: सीपीथॉन सोर्स कोड लेआउट । अगर कुछ बदलना चाहिए, तो वह संसाधन भी अपडेट हो जाएगा।


1

जैसा @ जिम ने उल्लेख किया है, फ़ाइल संगठन यहाँ वर्णित है । खोज में आसानी के लिए पुन: प्रस्तुत:

पायथन मॉड्यूल के लिए, विशिष्ट लेआउट है:

Lib/<module>.py
Modules/_<module>.c (if theres 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.