பைதான் – 11

6.4.1 From package import *

 

from sound.effects import * என எழுதும்போது என்ன நடக்கிறது?

File system-க்குள் சென்று, அந்த package-ல் உள்ள submodules-ஐ படித்து அவை அனைத்தையும் import செய்கிறது.

மிக எளிதாக தோன்றும் இந்த வழி mac மற்றும் windows ஆப்பரேடிங் சிஸ்டங்களில் சரியாக இயங்குவதில்லை. இவற்றில் filename-ஆனது ஒரே மாதிரியாக இல்லை. ECHO.PY என்ற file-ஐ import செய்யும்போது echo, Echo, ECHOஎன்ற எந்த பெயரில் importசெய்வது என்று குழப்பம் ஏற்படுகிறது. உதாரணமாக windows 95-ல் எல்லா file name-ம் முதல் எழுத்து capital-ஆக இருக்கும். DOS-ல் 8+3என்ற அளவில் மட்டுமே file name இருக்கலாம்.

இதற்கு என்ன தீர்வு?

* என்பதில் எதையெல்லாம் import செய்யலாம் நாமே ஒரு file-ல் எழுதிவிட வேண்டும். __init__.pyஎன்ற list-ல் எல்லா மாடியூல் பெயர்களையும் எழுத வேண்டும். from package import * என பயன்படுத்தும்போது, இந்த list படிக்கப்பட்டு அதில் உள்ளவை எல்லாம் import செய்யப்படுகின்றன .

 

புது package-ஐ வெளியிடும்போது __all__ என்ற list-ஐயும் புதுப்பிக்க வேண்டும்.

உதாரணம் sound/effects/__init__.py ல் பின்வருமாறு எழுதுவோம்.

__all__ = ["echo", "surround", "reverse"]

 

 

இது * என்பது மேற்கண்ட மூன்று sub module-களை மட்டும் குறிப்பிட்டு import செய்ய பயன்படுகிறது.

பொதுவாக *என்று import செய்வது தவிர்க்கப்படுகிறது. இது நமது விருப்பம் மட்டுமே. * என import செய்வதில் சில நேரங்களில் டைப் செய்வது எளிது. ஆனால் பின்னாட்களில் code-ஐ படிக்கும்போது, சற்றே புரியாமல் போகலாம்.பெயர்தந்து import செய்யும்போது எப்போது யார் படித்தாலும் புரியும்.

6.4.2 Intra-package Reference

 

இந்த sub module-கள் சில நேரங்களில் ஒன்றை ஒன்று பயன்படுத்தலாம். surround என்ற மாடியூல் echo என்ற மாடியூலை பயன்படுத்தலாம். importஆனது current package-ல் தேடிய பின்பே path-ல் தேடுகிறது. இதனால் surround package-ல் வெறுமனே import echo அல்லது from echo import echofilterஎன எழுதலாம்.

current package-ல் இல்லை என்றால், அதற்கு முன் உள்ளதில் தேடப்படுகிறது.

 

package-ஆனது பல sub package-களை கொண்டிருப்பதால், முழுப் பெயரையும் எழுத வேண்டும். உதாரணமாக, sound filters.vocoder-ல் sound effects-ல் உள்ள echoதேவைப்பட்டால் from sound.effects.import echo என்றே எழுத வேண்டும்.

Python 2.5-ல் இருந்து relative import-ஐ பயன்படுத்தலாம். முழு பெயரையும் சொல்லாமல் புள்ளி மூலம் சொல்லலாம். கீழ்கண்ட உதாரணத்தைப் பார்க்கவும்.

from . import echo from .. import formats from ..filters import equalizer

பைதானில் __main__ என்ற மாடியூலே முதன்மையானது. இதைப் பயன்படுத்தும்போது மட்டும் முழு import path-ஐயும் தரவேண்டும்.

6.4.3 பல directory-களில் package-கள்

__init__.pyல் __path__ என்ற list-ஐ எழுதலாம். இதுவும் ஒரு list. இதில் தரப்படும் directory-களில் கூட நாம் submodule மற்றும் subpackage-களை வைத்துக் கொள்ளலாம்.

தொடரும்

%d bloggers like this: