Get started learning Python with DataCamp's free Intro to Python tutorial. Learn Data Science by completing interactive coding challenges and watching videos by expert instructors. Start Now!
This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join 11 million other learners and get started learning Python for data science today!
Good news! You can save 25% off your Datacamp annual subscription with the code LEARNPYTHON23ALE25 - Click here to redeem your discount
मॉड्यूल और पैकेज
प्रोग्रामिंग में, एक मॉड्यूल एक सॉफ़्टवेयर का ऐसा टुकड़ा होता है जो विशेष कार्यक्षमता प्रदान करता है। उदाहरण के लिए, जब एक पिंग पोंग गेम बनाना हो, तो एक मॉड्यूल गेम लॉजिक के लिए जिम्मेदार हो सकता है, और दूसरा मॉड्यूल स्क्रीन पर गेम को ड्रॉ करने के लिए। प्रत्येक मॉड्यूल में विभिन्न फाइलें होती हैं, जिन्हें अलग-अलग संपादित किया जा सकता है।
Writing modules
Python में मॉड्यूल केवल .py एक्सटेंशन वाली Python फाइलें होती हैं। मॉड्यूल का नाम फाइल नाम के समान होता है। एक Python मॉड्यूल में एक सेट के फंक्शन, क्लास या वेरिएबल परिभाषित और लागू किए जा सकते हैं। ऊपर दिए गए उदाहरण में दो फाइलें शामिल हैं:
mygame/
-
mygame/game.py
-
mygame/draw.py
Python स्क्रिप्ट game.py
गेम को लागू करता है। यह draw.py
फाइल से draw_game
फंक्शन का उपयोग करता है, या दूसरे शब्दों में, draw
मॉड्यूल जो स्क्रीन पर गेम को ड्रॉ करने के लिए लॉजिक को लागू करता है।
मॉड्यूल को अन्य मॉड्यूल से import
कमांड का उपयोग करके आयात किया जाता है। इस उदाहरण में, game.py
स्क्रिप्ट कुछ इस प्रकार हो सकता है:
```python
game.py
import the draw module
import draw
def play_game(): ...
def main(): result = play_game() draw.draw_game(result)
this means that if this script is executed, then
main() will be executed
if name == 'main': main() ```
draw
मॉड्यूल कुछ इस प्रकार हो सकता है:
```python
draw.py
def draw_game(): ...
def clear_screen(screen): ... ```
इस उदाहरण में, game
मॉड्यूल draw
मॉड्यूल को आयात करता है, जो इसे उस मॉड्यूल में लागू किए गए फंक्शन का उपयोग करने में सक्षम बनाता है। main
फंक्शन स्थानीय फ़ंक्शन play_game
का उपयोग गेम चलाने के लिए करता है, और फिर draw
मॉड्यूल में लागू किए गए फंक्शन draw_game
का उपयोग करके गेम के परिणाम को ड्रॉ करता है। draw
मॉड्यूल से draw_game
फंक्शन का उपयोग करने के लिए, हमें यह निर्दिष्ट करना होता है कि फंक्शन किस मॉड्यूल में लागू किया गया है, और इसके लिए डॉट ऑपरेटर का उपयोग करते हैं। game
मॉड्यूल से draw_game
फंक्शन का संदर्भ देने के लिए, हमें draw
मॉड्यूल को आयात करना होता है और फिर draw.draw_game()
को कॉल करना होता है।
जब import draw
निर्देश चलता है, तो Python इंटरप्रेटर उस निर्देशिका में मॉड्यूल नाम और .py
प्रत्यय वाली फाइल खोजता है जिसमें स्क्रिप्ट निष्पादित की गई थी। इस मामले में, यह draw.py
खोजेगा। अगर यह पाया जाता है, तो यह आयात किया जाएगा। अगर यह नहीं पाया जाता है, तो यह बिल्ट-इन मॉड्यूल की खोज जारी रखेगा।
आपने देखा होगा कि जब कोई मॉड्यूल आयात किया जाता है, तो एक .pyc
फाइल बनाई जाती है। यह एक संकलित Python फ़ाइल है। Python फाइलों को Python बाइटकोड में परिवर्तित करता है ताकि प्रत्येक बार जब मॉड्यूल लोड किए जाते हैं तो इसे फाइलों को पार्स न करना पड़े। अगर एक .pyc
फाइल मौजूद है, तो इसे .py
फाइल के बजाय लोड किया जाता है। यह प्रक्रिया उपयोगकर्ता के लिए पारदर्शी होती है।
Importing module objects to the current namespace
एक नामस्थान एक प्रणाली है जहां प्रत्येक ऑब्जेक्ट का नामांकन होता है और उन्हें Python में एक्सेस किया जा सकता है। हम from
कमांड का उपयोग करके मुख्य स्क्रिप्ट के नामस्थान में draw_game
फंक्शन को आयात करते हैं।
```python
game.py
import the draw module
from draw import draw_game
def main(): result = play_game() draw_game(result) ```
आपने देखा होगा कि इस उदाहरण में, मॉड्यूल का नाम draw_game
से पहले नहीं आता है, क्योंकि हमने import
कमांड का उपयोग करके मॉड्यूल का नाम निर्दिष्ट कर दिया है।
इस नोटेशन का लाभ यह है कि आपको मॉड्यूल का बार-बार संदर्भित करने की आवश्यकता नहीं होती। हालांकि, एक नामस्थान में दो ऑब्जेक्ट्स एक ही नाम के नहीं हो सकते, इसलिए import
कमांड किसी मौजूदा ऑब्जेक्ट को नामस्थान में प्रतिस्थापित कर सकता है।
Importing all objects from a module
आप import *
कमांड का उपयोग करके एक मॉड्यूल में सभी ऑब्जेक्ट्स को आयात कर सकते हैं जैसे:
```python
game.py
import the draw module
from draw import *
def main(): result = play_game() draw_game(result) ```
यह थोड़ा जोखिम भरा हो सकता है क्योंकि मॉड्यूल में किए गए परिवर्तन उस मॉड्यूल को प्रभावित कर सकते हैं जो इसका आयात करता है, लेकिन यह छोटा होता है, और आपको उस मॉड्यूल से प्रत्येक ऑब्जेक्ट को निर्दिष्ट करने की आवश्यकता नहीं होती।
Custom import name
मॉड्यूल को किसी भी नाम के तहत लोड किया जा सकता है जो आप चाहते हैं। यह तब उपयोगी होता है जब किसी मॉड्यूल को शर्तों पर आयात किया जाता है ताकि कोड के शेष भाग में एक ही नाम का उपयोग किया जा सके।
उदाहरण के लिए, यदि आपके पास दो draw
मॉड्यूल समान लेकिन थोड़ा अलग नामों के साथ हैं, तो आप निम्नलिखित कर सकते हैं:
```python
game.py
import the draw module
if visual_mode: # in visual mode, we draw using graphics import draw_visual as draw else: # in textual mode, we print out text import draw_textual as draw
def main(): result = play_game() # this can either be visual or textual depending on visual_mode draw.draw_game(result) ```
Module initialization
जब पहली बार एक मॉड्यूल किसी रनिंग Python स्क्रिप्ट में लोड किया जाता है, तो यह मॉड्यूल में कोड को एक बार निष्पादित करके आरंभिक होता है। अगर आपके कोड में कोई अन्य मॉड्यूल फिर से उसी मॉड्यूल को आयात करता है, तो इसे फिर से लोड नहीं किया जाएगा, इसलिए मॉड्यूल के अंदर के लोकल वेरिएबल एक "सिंगलटन" के रूप में कार्य करते हैं, जिसका अर्थ है कि वे केवल एक बार आरंभिक होते हैं।
आप इसे ऑब्जेक्ट्स को आरंभित करने के लिए उपयोग कर सकते हैं। उदाहरण के लिए:
```python
draw.py
def draw_game(): # when clearing the screen we can use the main screen object initialized in this module clear_screen(main_screen) ...
def clear_screen(screen): ...
class Screen(): ...
initialize main_screen as a singleton
main_screen = Screen() ```
Extending module load path
Python इंटरप्रेटर को यह बताने के कुछ तरीके हैं कि कहां से मॉड्यूल लोड किए जाएं, डिफ़ॉल्ट लोकल डायरेक्टरी और बिल्ट-इन मॉड्यूल के अलावा। आप PYTHONPATH
एनवायरनमेंट वेरिएबल का उपयोग करके अतिरिक्त डायरेक्टरीज को मॉड्यूल्स की खोज के लिए निर्दिष्ट कर सकते हैं जैसे:
bash
PYTHONPATH=/foo python game.py
यह game.py
को निष्पादित करता है, और स्क्रिप्ट को foo
डायरेक्टरी के साथ ही लोकल डायरेक्टरी से मॉड्यूल्स लोड करने की अनुमति देता है।
आप sys.path.append
फ़ंक्शन का भी उपयोग कर सकते हैं। इसे import
कमांड चलाने से पहले निष्पादित करें:
python
sys.path.append("/foo")
अब foo
डायरेक्टरी उन पथों की सूची में जोड़ दी गई है जहां से मॉड्यूल्स खोजे जाते हैं।
Exploring built-in modules
Python स्टैंडर्ड लाइब्रेरी में बिल्ट-इन मॉड्यूल्स की पूरी सूची यहाँ देखें।
Python में मॉड्यूल्स का पता लगाने में दो बहुत महत्वपूर्ण फंक्शन काम में आते हैं - dir
और help
फंक्शन।
urllib
मॉड्यूल को आयात करने के लिए, जो हमें URLs से डेटा पढ़ने में सक्षम बनाता है, हम मॉड्यूल को import
करते हैं:
```python
import the library
import urllib
use it
urllib.urlopen(...) ```
हम dir
फंक्शन का उपयोग करके देख सकते हैं कि किस मॉड्यूल में कौन-कौन से फंक्शन लागू किए गए हैं:
```python
import urllib dir(urllib) ['ContentTooShortError', 'FancyURLopener', 'MAXFTPCACHE', 'URLopener', 'all', 'builtins', 'doc', 'file', 'name', 'package', 'version', '_ftperrors', '_get_proxies', '_get_proxy_settings', '_have_ssl', '_hexdig', '_hextochr', '_hostprog', '_is_unicode', '_localhost', '_noheaders', '_nportprog', '_passwdprog', '_portprog', '_queryprog', '_safe_map', '_safe_quoters', '_tagprog', '_thishost', '_typeprog', '_urlopener', '_userprog', '_valueprog', 'addbase', 'addclosehook', 'addinfo', 'addinfourl', 'always_safe', 'basejoin', 'c', 'ftpcache', 'ftperrors', 'ftpwrapper', 'getproxies', 'getproxies_environment', 'getproxies_macosx_sysconf', 'i', 'localhost', 'main', 'noheaders', 'os', 'pathname2url', 'proxy_bypass', 'proxy_bypass_environment', 'proxy_bypass_macosx_sysconf', 'quote', 'quote_plus', 'reporthook', 'socket', 'splitattr', 'splithost', 'splitnport', 'splitpasswd', 'splitport', 'splitquery', 'splittag', 'splittype', 'splituser', 'splitvalue', 'ssl', 'string', 'sys', 'test', 'test1', 'thishost', 'time', 'toBytes', 'unquote', 'unquote_plus', 'unwrap', 'url2pathname', 'urlcleanup', 'urlencode', 'urlopen', 'urlretrieve'] ```
जब हम मॉड्यूल में उस फंक्शन को पाते हैं जिसका हम उपयोग करना चाहते हैं, तो हम इसके बारे में अधिक जानकारी help
फंक्शन का उपयोग करके पढ़ सकते हैं, Python इंटरप्रेटर का उपयोग करके:
python
help(urllib.urlopen)
Writing packages
पैकेज कई पैकेजों और मॉड्यूलों को समाहित करने वाले नामस्थान होते हैं। वे बस निर्देशिकाएँ होती हैं, लेकिन कुछ आवश्यकताओं के साथ।
Python में प्रत्येक पैकेज एक निर्देशिका होती है जो एक विशेष फाइल __init__.py
को अनिवार्य रूप से रखना चाहिए। यह फाइल, जो खाली भी हो सकती है, इंगित करती है कि जिस डायरेक्टरी में यह स्थित है वह एक Python पैकेज है। इस तरह इसे एक मॉड्यूल की तरह आयात किया जा सकता है।
यदि हम एक डायरेक्टरी बनाते हैं जिसका नाम foo
है, जो पैकेज का नाम दर्शाता है, हम तब इस पैकेज के अंदर bar
नाम का एक मॉड्यूल बना सकते हैं। फिर हम foo
डायरेक्टरी के अंदर __init__.py
फाइल जोड़ते हैं।
bar
मॉड्यूल का उपयोग करने के लिए, हम इसे दो तरीकों से आयात कर सकते हैं:
python
import foo.bar
या:
python
from foo import bar
पहले उदाहरण में, जब भी हम मॉड्यूल bar
का उपयोग करते हैं तो हमें foo
उपसर्ग का उपयोग करना होता है। दूसरे उदाहरण में, हमें ऐसा नहीं करना पड़ता, क्योंकि हमने मॉड्यूल को हमारे मॉड्यूल के नामस्थान में आयात कर लिया है।
__init__.py
फाइल इस बात का निर्णय भी ले सकती है कि कौन से मॉड्यूल पैकेज के API के रूप में निर्यात करे, जबकि अन्य मॉड्यूल को आंतरिक रखते हुए, __all__
वेरिएबल को अधिलेखित करके जैसे:
```python init.py:
all = ["bar"] ```
Exercise
इस अभ्यास में, re
मॉड्यूल में सभी फंक्शनों की वर्णानुक्रमित सूची प्रिंट करें जिनमें शब्द find
शामिल है।
import re
# Your code goes here
find_members = []
import re
# Your code goes here
find_members = []
for member in dir(re):
if "find" in member:
find_members.append(member)
print(sorted(find_members))
test_object('find_members')
success_msg('Great work!')
This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join over a million other learners and get started learning Python for data science today!