मैं पहले कुछ भ्रम को दूर करना चाहता हूं। __file__
एक वाइल्डकार्ड नहीं है यह एक विशेषता है। डबल अंडरस्कोर विशेषताओं और तरीकों को सम्मेलन द्वारा "विशेष" माना जाता है और एक विशेष उद्देश्य की सेवा करता है।
http://docs.python.org/reference/datamodel.html कई विशेष विधियों और विशेषताओं को दिखाता है, यदि वे सभी नहीं हैं।
इस मामले __file__
में एक मॉड्यूल (एक मॉड्यूल ऑब्जेक्ट) की एक विशेषता है। पायथन में एक .py
फ़ाइल एक मॉड्यूल है। तो import amodule
एक विशेषता होगी __file__
जिसका अंतर परिस्थितियों में विभिन्न चीजों का मतलब है।
डॉक्स से लिया गया:
__file__
उस फ़ाइल का पथनाम है जिसमें से मॉड्यूल लोड किया गया था, अगर वह फ़ाइल से लोड किया गया था। __file__
विशेषता सी मॉड्यूल है कि स्थिर दुभाषिया में जुड़े हुए हैं के लिए मौजूद नहीं है; साझा पुस्तकालय से गतिशील रूप से लोड किए गए विस्तार मॉड्यूल के लिए, यह साझा लाइब्रेरी फ़ाइल का पथनाम है।
आपके मामले में मॉड्यूल __file__
वैश्विक नाम स्थान में अपनी विशेषता का उपयोग कर रहा है।
कार्रवाई में इसे देखने के लिए प्रयास करें:
# file: test.py
print globals()
print __file__
और भाग खड़ा हुआ:
python test.py
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__':
'test_print__file__.py', '__doc__': None, '__package__': None}
test_print__file__.py
__file__
सभी मामलों में परिभाषित नहीं किया गया है, उदाहरण के लिए सांख्यिकीय रूप से जुड़े सी मॉड्यूल। हम__file__
हमेशा उपलब्ध होने पर भरोसा नहीं कर सकते ।