क्या कोई फ़ंक्शन ढूंढने का कोई तरीका है जो वर्तमान फ़ंक्शन कहलाता है? तो उदाहरण के लिए:पैरेंट फ़ंक्शन प्राप्त करें
def first():
second()
def second():
# print out here what function called this one
कोई विचार?
क्या कोई फ़ंक्शन ढूंढने का कोई तरीका है जो वर्तमान फ़ंक्शन कहलाता है? तो उदाहरण के लिए:पैरेंट फ़ंक्शन प्राप्त करें
def first():
second()
def second():
# print out here what function called this one
कोई विचार?
import inspect
def first():
return second()
def second():
return inspect.getouterframes(inspect.currentframe())[1]
first()[3] # 'first'
आप ट्रेसबैक मॉड्यूल के extract_stack फ़ंक्शन का उपयोग कर सकते हैं।
import traceback
def first():
second()
def second():
print traceback.extract_stack(limit=2)[-2][2]
ये जल्दी से कम से कम जहां-am-मैं डिबगिंग एड्स जोड़ने जब आप अभी तक एक और मॉड्यूल आयात करने के लिए नहीं करना चाहते हैं के लिए अच्छी तरह से काम करते हैं। (CPython केवल, केवल डीबगिंग के लिए।)
def LINE(back = 0):
return sys._getframe(back + 1).f_lineno
def FILE(back = 0):
return sys._getframe(back + 1).f_code.co_filename
def FUNC(back = 0):
return sys._getframe(back + 1).f_code.co_name
def WHERE(back = 0):
frame = sys._getframe(back + 1)
return "%s/%s %s()" % (os.path.basename(frame.f_code.co_filename),
frame.f_lineno, frame.f_code.co_name)
उदाहरण:
import sys, os # these you almost always have...
def WHERE(back = 0):
frame = sys._getframe(back + 1)
return "%s/%s %s()" % (os.path.basename(frame.f_code.co_filename),
frame.f_lineno, frame.f_code.co_name)
def first():
second()
def second():
print WHERE()
print WHERE(1)
first()
आउटपुट:
$ python fs.py
fs.py/12 second()
fs.py/9 first()
@MikeG .: चाहते हैं एक उत्पादन विज्ञप्ति में यह जानकारी बुरा है, हाँ। पाइथन के एक बड़े टुकड़े को डीबग और समझने के लिए इसका उपयोग ठीक है, आईएमएचओ। –