Python Language
पायथन स्रोत कोड और बायटेकोड तक पहुंचना
खोज…
किसी फ़ंक्शन का बायटेकोड प्रदर्शित करें
पायथन इंटरप्रिटर कोड को पायथन के वर्चुअल मशीन पर क्रियान्वित करने से पहले कोड को बाइटकोड में संकलित करता है (यह भी देखें कि पायथन बाइटकोड क्या है?)
यहां देखें कि पायथन फ़ंक्शन के बाइटकोड को कैसे देखें
import dis
def fib(n):
if n <= 2: return 1
return fib(n-1) + fib(n-2)
# Display the disassembled bytecode of the function.
dis.dis(fib)
dis.dis
मॉड्यूल में फ़ंक्शन dis.dis
, इसके पास दिए गए फ़ंक्शन के dis.dis
को वापस कर देगा।
किसी फ़ंक्शन के कोड ऑब्जेक्ट की खोज करना
CPython फ़ंक्शन ऑब्जेक्ट के लिए कोड ऑब्जेक्ट तक पहुंचने की अनुमति देता है।
__code__
ऑब्जेक्ट में __code__
के कच्चे बाइटकोड ( co_code
) के साथ-साथ अन्य जानकारी जैसे स्थिरांक और चर नाम शामिल हैं।
def fib(n):
if n <= 2: return 1
return fib(n-1) + fib(n-2)
dir(fib.__code__)
def fib(n):
if n <= 2: return 1
return fib(n-1) + fib(n-2)
dir(fib.__code__)
किसी ऑब्जेक्ट का स्रोत कोड प्रदर्शित करें
ऐसी वस्तुएँ जो बिल्ट-इन नहीं हैं
पायथन ऑब्जेक्ट का स्रोत कोड प्रिंट करने के लिए inspect
उपयोग करें। ध्यान दें कि यह बिल्ट-इन ऑब्जेक्ट्स के लिए और न ही इंटरेक्टिवली परिभाषित वस्तुओं के लिए काम करेगा। इनके लिए आपको बाद में बताए गए अन्य तरीकों की आवश्यकता होगी।
यहाँ कैसे विधि के स्रोत कोड मुद्रित करने के लिए है randint
से random
मॉड्यूल:
import random
import inspect
print(inspect.getsource(random.randint))
# Output:
# def randint(self, a, b):
# """Return random integer in range [a, b], including both end points.
# """
#
# return self.randrange(a, b+1)
प्रलेखन स्ट्रिंग को प्रिंट करने के लिए
print(inspect.getdoc(random.randint))
# Output:
# Return random integer in range [a, b], including both end points.
उस फ़ाइल का पूरा पथ प्रिंट करें जहाँ विधि random.randint
परिभाषित है:
print(inspect.getfile(random.randint))
# c:\Python35\lib\random.py
print(random.randint.__code__.co_filename) # equivalent to the above
# c:\Python35\lib\random.py
वस्तुओं को अंतःक्रियात्मक रूप से परिभाषित किया गया
यदि ऑब्जेक्ट को परिभाषित किया जाता है तो इंटरेक्टिव रूप से inspect
स्रोत कोड प्रदान नहीं कर सकता है लेकिन आप इसके बजाय dill.source.getsource
उपयोग कर सकते हैं
# define a new function in the interactive shell
def add(a, b):
return a + b
print(add.__code__.co_filename) # Output: <stdin>
import dill
print dill.source.getsource(add)
# def add(a, b):
return a + b
निर्मित वस्तुओं
पायथन के अंतर्निहित कार्यों का स्रोत कोड सी में लिखा गया है और इसे केवल पायथन के स्रोत कोड ( मर्क्यूरियल पर होस्ट किया गया या https://www.python.org/downloads/source/) से देखा जा सकता है।
print(inspect.getsource(sorted)) # raises a TypeError
type(sorted) # <class 'builtin_function_or_method'>