पायथन में, मेरे पास एक सजावट है जिसे किसी वास्तविक कार्य को छोड़ना पड़ता है यदि किसी फ़ंक्शन को स्थानीय रूप से परिभाषित किया जाता है जो इसे कॉल करता है।यह पता लगाने के लिए कि क्या फ़ंक्शन को स्थानीय रूप से परिभाषित किया गया है?
def fn1():
# @my_decorator will be here
def fn2():
pass
print(fn2)
return fn2
x = fn1()
print(x)
print(x.__module__)
यह इस प्रिंट:: मैं एक साधारण परीक्षण स्क्रिप्ट बनाया
<function fn1.<locals>.fn2 at 0x7fd61bdf3ae8>
<function fn1.<locals>.fn2 at 0x7fd61bdf3ae8>
__main__
के रूप में मैं देख रहा हूँ, अजगर देखता है कि समारोह (प्रिंट किया गया लेख में <locals>
) एक स्थानीय अंतरिक्ष में परिभाषित किया गया है, लेकिन मैं यह नहीं देख सकता कि मैं उस डेटा का थोड़ा सा कैसे पा सकता हूं। मैं inspect
मॉड्यूल के माध्यम से चला गया, और कुछ भी समान नहीं दिखता।
मैं भरोसा नहीं कर सकता कि समारोह ग्लोबल्स में है या नहीं।
मैं क्या उपयोग करूं? ,
'<locals>' in f.__qualname__
यह मेरे लिए भंगुर लगता है, हालांकि:
मुझे लगता है कि यह एक वैध समाधान है। फ़ंक्शन के 'repr' को बनाने के लिए' __qualname__' भी उपयोग किया जाता है (कम से कम CPython में), इसमें कोई अन्य छुपा गुण नहीं है जो यह जांचता है। –
@JimFasarakisHilliard हाँ, मैं 'inspect.currentframe() के साथ खेल रहा था। F_back.f_locals globals()' है, जो भी काम करता प्रतीत होता है, लेकिन मुझे यह भी * कम * पसंद है। –