மாடியூல் – Module:
பைதான் interpreter- ல் சிறிது நேரம் வேலை செய்கிறீர்கள். பல variableமற்றும் functionகளை உருவாக்கி பயன்படுத்துகிறீர்கள். பின் interpreter-ஐ விட்டு வெளியேறுகிறீகள். சிறிது நேரம் கழித்து மீண்டும் python interpreter-ஐ இயக்குகிறீர்கள். இதில் சற்று நேரத்திற்கு முன் உருவாக்கிய variable மற்றும் functions கிடைப்பதில்லை. அவற்றை பயன்படுத்த, மீண்டும் உருவாக்க வேண்டும். இதற்கு ஒரே மாற்று வழி, நாம் எழுதும் program வரிகளை ஒரு text file-ல் சேமித்து, பைதான் மூலம் அந்த file-ஐ இயக்க வேண்டும். இந்த text file ஒரு python script எனப்படும்.
இவ்வாறு நாம் எழுதும் python script பெரிதாக வளரும் போது, அதை சிறு சிறு script-களாக பிரித்து, பல தனித்தனி file-களில் சேமிக்க வேண்டும். சில நேரங்களில் ஒரு function-ஐ பல script-களில் பயன்படுத்த ஒவ்வொரு file-லும் அதே function-ஐ எழுத நேரிடும்.
இதற்கு பயன்படும் ஒரு எளிய வழியே module. இதில் நமக்கு தேவையான, அடிக்கடி பயன்படும் functions-ஐ ஒரு file-ல் சேமித்து, அதை எளிதில் பிற script-களில் பயன்படுத்திக் கொள்ளலாம். பிற module-களிலும் பயன்படுத்தலாம்.
ஒரு பைதான் module-ஆனது பைதான் definitionsமற்றும் statements-ஐ கொண்டிருக்கும். அதன் filename-ஐ ‘module name.py’ எனத் தர வேண்டும். –name– என்ற global variableஅந்த module-ன் பெயரை தருகிறது. இப்போது fibo என்ற module-ஐ உருவாக்குவோம். Text editor-ல் பின்வரும் program-ஐ எழுதி fibo.py என்ற பெயரில் சேமிக்கவும்.
# Fibonacci numbers module def fib(n): # write Fibonacci series up to n a, b = 0, 1 while b < n: print(b, end=' ') a, b = b, a+b print() def fib2(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
இப்போது அதே folder-க்கு terminal-ல் சென்று python interpreter-ஐ இயக்கவும். fibo module-ஐ பயன்படுத்த அதை import செய்ய வேண்டும்.
>>> import fibo
இது பைதானில் symbol table-ல் fibo-ஐ சேமிக்கிறது. நாம் fibo மாடியூலில் எழுதிய functions-ஐ பயன்படுத்த fibo என்ற module name-ஐ உடன் சேர்த்து பயன்படுத்த வேண்டும்.
>>> fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 >>> fibo.fib2(100) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] >>> fibo.__name__ 'fibo'
இந்த functions-ஐ local name-க்கு assign செய்தும் பயன்படுத்தலாம்.
>>> fib = fibo.fib >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
6.1 மேலும் சில தகவல்கள்
ஒரு module-ல் statements மற்றும் functions இருக்கலாம். இந்த statements மாடியூலை முதல்முறை import செய்யும்போது இயக்கப்படுகின்றன.
ஒவ்வொரு மாடியூலுக்கும் தனித்தனியான sumbol table உருவாகிறது. இதில் அந்த மாடியூலில் பயன்படும் variable மற்றும் functions-ன் பெயர்கள் சேமிக்கப்படுகின்றன. இதனால் python-ன் global symbol மற்றும் module-ன் private symbol இடையே ஏற்படும் குழப்பம் தவிர்க்கப்படுகிறது. Modulename.itemname என்றே பயன்படுத்த வேண்டும்.
ஒரு மாடியூல் வேறு பல மாடியூல்களை கூட importசெய்யலாம். இந்த import-ஐ script-ல் ஆரம்பத்தில் மட்டுமின்றி, எங்கு வேண்டுமானாலும் import செய்து கொள்ளலாம்.
import செய்யும்போது மொத்த மாடியூலை மட்டுமின்றி, நமக்கு தேவையான functions-ஐ மட்டும் கூட importசெய்யாலாம்.
>>> from fibo import fib, fib2
>>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
மேலும் அனைத்து functions-களையும் கீழ்க்கண்டவாறும் importசெய்யலாம்.
>>> from fibo import *
>>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
இது _ (underscore)-ல் தொடங்குவன தவிர்த்து பிற அனைத்தையும் import செய்கிறது.
6.1.1 Module path
நாம் spam எனும் மாடியூலை import செய்யும்போது , பைதான் interpreterஆனது spam.py என்ற file-ஐ தற்போதைய current directory-ல் தேடுகிறது. அங்கு இல்லையென்றால் PYTHONPATH என்ற environment variable-ல் குறிப்பிட்ட directory-களில் தேடுகிறது. இது shell variableஆன PATHபோன்றதே. PYTHONPATH-லோ அல்லது current directory-யிலோ மாடியூல் காணப்படாத போது, python-ன் installation directory-ல் தேடப்படுகிறது. உதாரணம் /usr/local/lib/python sys.path. என்ற variable-ல் இந்த directory-கள் பெறப்படுகின்றன. இந்த search path-ல் current directory-யும் இடம் பெறுவதால், நாம் standard moduleகளின் பெயரை file nameஆக பயன்படுத்தக் கூடாது.
6.1.2 Compile செய்யப்பட்ட பைதான் File
ஒவ்வொரு முறையும் ஒரு பைதான் புரோகிராமை execute செய்யும்போதும் ஏற்படும் காலை விரயத்தை தவிர்க்க,அந்த பைதான் புரோகிராம் compile செய்யப்பட்டு binary file பெறப்படுகிறது. இந்த binary file இயங்கும் வேகம் மிக அதிகம் ஆகும். spam.py என்ற file, compile செய்யப்படும்போது spam.pyc என்ற file கிடைக்கிறது.
இரண்டின் மாறுபட்டு நேரம் (modified time)-ஐ பொறுத்து, மிக சமீபத்திய file இயக்கப்படுகிறது.
இந்த .pyc fileகள் தானகவே உருவாக்கப்படுகின்றன. இவை platform independent file-கள். இவற்றை எந்த operating system-லும் இயக்கலாம்.
கவனிக்க:
* பைதான் interpreter-ஐ _@ என்ற flag-உடன் இயக்கும்போது . உருவாகும். .pyoஎன்ற binary fileஆனது நன்கு optimize செய்யப்படுகிறது. Py fileஆனது compile செய்யப்படும்போது optimized byte code தரப்படுகிறது.
* இரண்டு _0 அதாவது _00 என்ற flag-ஐ கூட பயன்படுத்தலாம். இது மேலும் அதிக அளவில் optimize செய்கிறது. ஆனால் இது சில நேரங்களில் பிழைகளை தந்துவிடும்.
* pyc மற்றும் pyo file கள் வேகமாக இயங்குபவை அல்ல. Py file இயங்கும் அதே வேகத்தில் தான் இவையும் இயங்கும். ஆனால் இவை memory-ல் வேகமாக load செய்யப்படுகின்றன.
* நாம் ஒரு பெரிய பைதான் புரோகிராமை எழுதுவதற்கு பதிலாக, அதை ஒரு module-ஆக எழுதி import செய்தால், pyc மற்றும் pyo file கள் உருவாகி, விரைவாக load செய்யப்படுகின்றன.
* compile all என்ற மாடியூல் ஆனது, current directory-ல் உள்ள எல்லா பைதான் மாடியூல்களுக்கும் .pyc file களை உருவாக்கும். -0 பயன்படுத்தும்போது .pyo file களை உருவாக்கும்.