पायथन 3 - मॉड्यूल

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

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

उदाहरण

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

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

आयात कथन

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

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

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

#!/usr/bin/python3

# Import module support
import support

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

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

Hello : Zara

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

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

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

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

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

#!/usr/bin/python3

# Fibonacci numbers module

def fib(n): # return Fibonacci series up to n
   result = []
   a, b = 0, 1
   while b < n:
      result.append(b)
      a, b = b, a + b
   return result
>>> from fib import fib
>>> fib(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

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

से ... आयात * कथन

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

from modname import *

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

लिपियों के रूप में निष्पादन मॉड्यूल

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

इस कोड को अपने मॉड्यूल के अंत में जोड़ें -

#!/usr/bin/python3

# Fibonacci numbers module

def fib(n): # return Fibonacci series up to n
   result = []
   a, b = 0, 1
   while b < n:
      result.append(b)
      a, b = b, a + b
   return result
if __name__ == "__main__":
   f = fib(100)
   print(f)

जब आप उपरोक्त कोड चलाते हैं, तो निम्न आउटपुट प्रदर्शित होगा।

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

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

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

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

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

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

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

PYTHONPATH चर

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

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

set PYTHONPATH = c:\python34\lib;

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

set PYTHONPATH = /usr/local/lib/python

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

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

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

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

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

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

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

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

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

#!/usr/bin/python3

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/python3

# 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__ वह फ़ाइल नाम है जिसमें से मॉड्यूल लोड किया गया था।

ग्लोबल्स () और लोकल () फ़ंक्शंस

globals() तथा locals() फ़ंक्शंस का उपयोग वैश्विक और स्थानीय नामस्थानों में नामों को वापस करने के लिए किया जा सकता है, जहां से उन्हें बुलाया जाता है।

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

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

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

पुनः लोड () फ़ंक्शन

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

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

reload(module_name)

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

reload(hello)

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

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

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

#!/usr/bin/python3

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/python3

# 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

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