खोज…


परिचय

__name__ विशेष चर का उपयोग यह जांचने के लिए किया जाता है कि फ़ाइल को मॉड्यूल के रूप में आयात किया गया है या नहीं, और उनके __name__ विशेषता द्वारा फ़ंक्शन, वर्ग, मॉड्यूल ऑब्जेक्ट की पहचान करने के लिए।

टिप्पणियों

पायथन विशेष चर __name__ युक्त मॉड्यूल के नाम पर सेट किया गया है। शीर्ष स्तर पर (जैसे कि इंटरएक्टिव इंटरप्रेटर, या मुख्य फ़ाइल में) यह '__main__' सेट है। यदि किसी मॉड्यूल को आयात किए जाने के बजाय सीधे चलाया जा रहा है तो स्टेटमेंट को ब्लॉक करने के लिए इसका उपयोग किया जा सकता है।

संबंधित विशेष विशेषता obj.__name__ वर्गों, आयातित मॉड्यूल और फ़ंक्शंस (विधियों सहित) पर पाई obj.__name__ है, और परिभाषित ऑब्जेक्ट का नाम देती है।

__name__ == '__main__'

विशेष चर __name__ उपयोगकर्ता द्वारा निर्धारित नहीं है। इसका उपयोग ज्यादातर यह जांचने के लिए किया जाता है कि मॉड्यूल स्वयं द्वारा चलाया जा रहा है या नहीं, क्योंकि import किया गया था। आयात होने पर अपने मॉड्यूल के कुछ हिस्सों को चलाने के लिए, if __name__ == '__main__' जाँच करें।

बता दें कि mod_1.py सिर्फ एक लाइन लंबी होगी:

import module2.py

और देखते हैं कि क्या होता है, जो मॉड्यूल 2 थ्रेड पर निर्भर करता है

स्थिति 1

module2.py

print('hello')

चल रहे मॉड्यूल 1 थिंकपैड hello को प्रिंट करेगा
चल रहे मॉड्यूल 2 थिंकपैड hello को प्रिंट करेगा

स्थिति 2

module2.py

if __name__ == '__main__':
    print('hello')

चल रहे मॉड्यूल 1 डीएमआर कुछ भी नहीं छापेंगे
चल रहे मॉड्यूल 2 थिंकपैड hello को प्रिंट करेगा

function_class_or_module .__ name__

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

import os

class C:
    pass

def f(x):
    x += 2
    return x


print(f)
# <function f at 0x029976B0>
print(f.__name__)
# f

print(C)
# <class '__main__.C'>
print(C.__name__)
# C

print(os)
# <module 'os' from '/spam/eggs/'>
print(os.__name__)
# os

__name__ विशेषता नहीं है, हालांकि, चर का नाम जो वर्ग, विधि या फ़ंक्शन का संदर्भ देता है, बल्कि यह परिभाषित किए जाने पर इसे दिया गया नाम है।

def f():
    pass

print(f.__name__)
# f - as expected

g = f
print(g.__name__)
# f - even though the variable is named g, the function is still named f

डिबगिंग के लिए, इसका उपयोग दूसरों के बीच किया जा सकता है:

def enter_exit_info(func):
    def wrapper(*arg, **kw):
        print '-- entering', func.__name__
        res = func(*arg, **kw)
        print '-- exiting', func.__name__
        return res
    return wrapper

@enter_exit_info
def f(x):
    print 'In:', x
    res = x + 2
    print 'Out:', res
    return res

a = f(2)

# Outputs:
#     -- entering f
#     In: 2
#     Out: 4
#     -- exiting f

लॉगिंग में उपयोग करें

अंतर्निहित logging कार्यक्षमता को कॉन्फ़िगर करते समय, एक सामान्य पैटर्न वर्तमान मॉड्यूल के __name__ के साथ एक लकड़हारा बनाना है:

logger = logging.getLogger(__name__)

इसका मतलब है कि मॉड्यूल का पूरी तरह से योग्य नाम लॉग में दिखाई देगा, जिससे यह देखना आसान हो जाएगा कि संदेश कहां से आए हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow