अजगर - मॉड्यूल

एक मॉड्यूल आपको तार्किक रूप से अपने पायथन कोड को व्यवस्थित करने की अनुमति देता है। एक मॉड्यूल में संबंधित कोड को समूह को समझना और उपयोग करना आसान बनाता है। एक मॉड्यूल एक पायथन ऑब्जेक्ट है जिसका मनमाने ढंग से नामित विशेषताओं के साथ आप बाँध सकते हैं और संदर्भ दे सकते हैं।

बस, एक मॉड्यूल पायथन कोड से युक्त एक फ़ाइल है। एक मॉड्यूल कार्यों, कक्षाओं और चर को परिभाषित कर सकता है। एक मॉड्यूल रन करने योग्य कोड भी शामिल कर सकता है।

उदाहरण

Aname नाम के एक मॉड्यूल के लिए पायथन कोड आमतौर पर aname.py नाम की फ़ाइल में रहता है । यहाँ एक सरल मॉड्यूल का एक उदाहरण है, support.py

def print_func( par ):
   print "Hello : ", par
   return

आयात वक्तव्य

आप किसी अन्य पायथन स्रोत फ़ाइल में आयात कथन को निष्पादित करके किसी भी पायथन स्रोत फ़ाइल को मॉड्यूल के रूप में उपयोग कर सकते हैं। आयात निम्न सिंटैक्स है -

import module1[, module2[,... moduleN]

जब दुभाषिया एक आयात विवरण का सामना करता है, तो यह मॉड्यूल को आयात करता है यदि मॉड्यूल खोज पथ में मौजूद है। एक खोज पथ निर्देशिकाओं की एक सूची है जो दुभाषिया एक मॉड्यूल आयात करने से पहले खोजता है। उदाहरण के लिए, मॉड्यूल support.py आयात करने के लिए, आपको निम्न कमांड को स्क्रिप्ट के शीर्ष पर रखना होगा -

#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Zara")

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Hello : Zara

एक मॉड्यूल केवल एक बार लोड किया जाता है, चाहे वह कितनी बार आयात किया गया हो। यह कई बार आयात होने पर मॉड्यूल के निष्पादन को बार-बार होने से रोकता है।

से ... आयात वक्तव्य

अजगर है से बयान आप वर्तमान नाम स्थान में एक मॉड्यूल से विशिष्ट विशेषताओं के आयात करने देता है। से ... आयात निम्नलिखित वाक्य रचना है -

from modname import name1[, name2[, ... nameN]]

उदाहरण के लिए, मॉड्यूल फ़ाइबर से फंक्शन रिट्रेसमेंट आयात करने के लिए, निम्नलिखित कथन का उपयोग करें -

from fib import fibonacci

यह कथन संपूर्ण मॉड्यूल फ़ाइब को वर्तमान नामस्थान में आयात नहीं करता है; यह इंपोर्ट मॉड्यूल के ग्लोबल सिंबल टेबल में माड्यूल फाइब से सिर्फ आइटम का परिचय देता है।

से ... आयात * वक्तव्य

निम्नलिखित आयात विवरण का उपयोग करके सभी नामों को वर्तमान नामस्थान में एक मॉड्यूल से आयात करना संभव है -

from modname import *

यह मॉड्यूल से सभी वस्तुओं को वर्तमान नाम स्थान में आयात करने का एक आसान तरीका प्रदान करता है; हालाँकि, इस कथन को संयम से इस्तेमाल किया जाना चाहिए।

मॉड्यूल का पता लगाना

जब आप एक मॉड्यूल आयात करते हैं, तो पायथन दुभाषिया निम्न अनुक्रमों में मॉड्यूल की खोज करता है -

  • वर्तमान निर्देशिका।

  • यदि मॉड्यूल नहीं मिला है, तो पायथन शेल शेल PYTHONPATH में प्रत्येक निर्देशिका को खोजता है।

  • यदि अन्य सभी विफल रहता है, तो पायथन डिफ़ॉल्ट पथ की जांच करता है। UNIX पर, यह डिफ़ॉल्ट पथ सामान्य रूप से / usr / स्थानीय / lib / अजगर / है।

मॉड्यूल खोज पथ सिस्टम मॉड्यूल sys में संग्रहीत है sys.pathचर। Sys.path चर में वर्तमान निर्देशिका, PYTHONPATH और स्थापना-निर्भर डिफ़ॉल्ट शामिल हैं।

PYTHONPATH चर

PYTHONPATH एक पर्यावरण चर है, जिसमें निर्देशिकाओं की सूची है। PYTHONPATH का सिंटैक्स शेल चर पथ के समान है।

यहाँ एक विंडोज सिस्टम से एक ठेठ PYTHONPATH है -

set PYTHONPATH = c:\python20\lib;

और यहाँ UNIX प्रणाली से एक विशिष्ट PYTHONPATH है -

set PYTHONPATH = /usr/local/lib/python

नामस्थान और स्कोपिंग

चर ऐसे नाम (पहचानकर्ता) हैं जो वस्तुओं का नक्शा बनाते हैं। एक नाम स्थान चर नामों (कुंजियों) और उनके संबंधित वस्तुओं (मूल्यों) का एक शब्दकोश है।

एक पायथन बयान एक स्थानीय नाम स्थान और वैश्विक नाम स्थान में चर का उपयोग कर सकता है । यदि किसी स्थानीय और वैश्विक चर का एक ही नाम है, तो स्थानीय चर वैश्विक चर का छाया करता है।

प्रत्येक फ़ंक्शन का अपना स्थानीय नामस्थान होता है। कक्षा के तरीके सामान्य कार्यों के समान ही नियम का पालन करते हैं।

पायथन शिक्षित अनुमान लगाता है कि क्या चर स्थानीय या वैश्विक हैं। यह मानता है कि किसी फ़ंक्शन में दिए गए किसी भी चर को स्थानीय माना जाता है।

इसलिए, किसी फ़ंक्शन के भीतर एक वैश्विक वैरिएबल के लिए एक मान निर्दिष्ट करने के लिए, आपको पहले वैश्विक कथन का उपयोग करना होगा।

बयान वैश्विक VarName पायथन बताता है कि VarName एक वैश्विक चर है। पायथन ने चर के लिए स्थानीय नाम स्थान की खोज बंद कर दी।

उदाहरण के लिए, हम वैश्विक नाम स्थान में एक परिवर्तनीय मुद्रा को परिभाषित करते हैं । फ़ंक्शन मनी के भीतर , हम मनी को एक मूल्य प्रदान करते हैं , इसलिए पायथन मनी को एक स्थानीय चर के रूप में मानता है । हालाँकि, हमने इसे सेट करने से पहले लोकल वैरिएबल मनी की वैल्यू एक्सेस की है, इसलिए अनबाउंडलोक्योरर परिणाम है। वैश्विक कथन को रद्द करने से समस्या ठीक हो जाती है।

#!/usr/bin/python

Money = 2000
def AddMoney():
   # Uncomment the following line to fix the code:
   # global Money
   Money = Money + 1

print Money
AddMoney()
print Money

दिर () फंक्शन

Dir () अंतर्निहित फ़ंक्शन एक मॉड्यूल द्वारा परिभाषित नामों वाले तार की एक क्रमबद्ध सूची देता है।

सूची में सभी मॉड्यूल, चर और फ़ंक्शन के नाम हैं जो एक मॉड्यूल में परिभाषित हैं। निम्नलिखित एक सरल उदाहरण है -

#!/usr/bin/python

# Import built-in module math
import math

content = dir(math)
print content

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

यहां, विशेष स्ट्रिंग चर __name__ मॉड्यूल का नाम है, और __file__ वह फ़ाइल नाम है जिसमें से मॉड्यूल लोड किया गया था।

वैश्विक () और स्थानीय लोगों () कार्य

वैश्विक () और स्थानीय लोगों () कार्यों वैश्विक और स्थानीय जहां वे कहा जाता है से स्थान के आधार पर नामस्थान में नाम वापस जाने के लिए इस्तेमाल किया जा सकता।

यदि किसी फ़ंक्शन के भीतर से लोकल () को कॉल किया जाता है, तो यह उन सभी नामों को लौटा देगा जो उस फ़ंक्शन से स्थानीय रूप से एक्सेस किए जा सकते हैं।

यदि ग्लोबल्स () को किसी फ़ंक्शन के भीतर से कॉल किया जाता है, तो यह उन सभी नामों को लौटा देगा जिन्हें उस फ़ंक्शन से वैश्विक रूप से एक्सेस किया जा सकता है।

इन दोनों कार्यों का रिटर्न प्रकार शब्दकोश है। इसलिए, कुंजियों () फ़ंक्शन का उपयोग करके नाम निकाले जा सकते हैं।

पुनः लोड () समारोह

जब मॉड्यूल को स्क्रिप्ट में आयात किया जाता है, तो मॉड्यूल के शीर्ष-स्तरीय भाग में कोड केवल एक बार निष्पादित किया जाता है।

इसलिए, यदि आप किसी मॉड्यूल में शीर्ष-स्तरीय कोड को पुनः प्राप्त करना चाहते हैं, तो आप पुनः लोड () फ़ंक्शन का उपयोग कर सकते हैं । पुनः लोड () फ़ंक्शन पहले से आयातित मॉड्यूल को फिर से आयात करता है। पुनः लोड () फ़ंक्शन का सिंटैक्स यह है -

reload(module_name)

यहां, मॉड्यूल_नाम उस मॉड्यूल का नाम है जिसे आप फिर से लोड करना चाहते हैं और मॉड्यूल नाम वाले स्ट्रिंग को नहीं। उदाहरण के लिए, हेलो मॉड्यूल को पुनः लोड करने के लिए, निम्नलिखित करें -

reload(hello)

पायथन में पैकेज

एक पैकेज एक पदानुक्रमित फ़ाइल निर्देशिका संरचना है जो एकल पायथन अनुप्रयोग वातावरण को परिभाषित करता है जिसमें मॉड्यूल और उप-पैकेज और उप-उप-पैकेज और इसी तरह शामिल होते हैं।

फ़ोन निर्देशिका में उपलब्ध एक फ़ाइल पॉटशो पर विचार करें । इस फ़ाइल में स्रोत कोड की लाइन है -

#!/usr/bin/python

def Pots():
   print "I'm Pots Phone"

इसी तरह, हमारे पास एक और दो फाइलें हैं जिनके ऊपर एक ही नाम के साथ अलग-अलग फ़ंक्शन हैं -

  • फ़ंक्शन Isdn () वाले फ़ोन / Isdn.py फ़ाइल

  • फोन / जी 3 डीएम फंक्शन वाले जी 3 फाइल ()

अब, फ़ोन निर्देशिका में एक और फ़ाइल __init__.py बनाएँ -

  • Phone/__init__.py

फ़ोन आयात करते समय अपने सभी कार्य उपलब्ध कराने के लिए, आपको __init__.py में स्पष्ट आयात स्टेटमेंट डालने की आवश्यकता है -

from Pots import Pots
from Isdn import Isdn
from G3 import G3

जब आप इन लाइनों को __init__.py में जोड़ लेते हैं, तो आपके पास फ़ोन पैकेज आयात करते समय ये सभी कक्षाएं उपलब्ध होती हैं।

#!/usr/bin/python

# Now import your Phone Package.
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

उपरोक्त उदाहरण में, हमने प्रत्येक फ़ाइल में एकल फ़ंक्शन का उदाहरण लिया है, लेकिन आप अपनी फ़ाइलों में कई फ़ंक्शन रख सकते हैं। आप उन फ़ाइलों में विभिन्न पायथन कक्षाओं को भी परिभाषित कर सकते हैं और फिर आप उन कक्षाओं से अपने पैकेज बना सकते हैं।