ကြ်န္ေတာ္တို ့ Python မွာ module တစ္ခုကို import လုပ္မယ္ဆို import module လို ့သံုးလို ့ရသလို from module import * ဒါမွမပာုတ္ from module import func အဲ့သလိုသံုးလို ့ရတယ္ေပါ့။ အခုလိုအသံုးျပုတာေလးေတြကဘာကြာသလဲဆိုတာကိုေျပာျပမယ္ဗ်။
ဥပမာ sys ဆိုတဲ့ module ကုိ import လုပ္မယ့္ေပါ့။
import sys ကိုရွင္းရမယ္ဆုိတကယ္က sys ဆိုတဲ့ name တစ္ခုနဲ ့sys module ဆိုတဲ့ object ကိုတြဲေပးလိုက္တာပါ။ ဆက္ေျပာရမယ္ဆို import module ကိုအသံုးျပုတာက module ထဲကေကာင္ေတြကို direct access ေခါ္လို ့မရပါဘူး။ ေခါ္မယ္ဆိုရင္လဲအေရွ ့က module နာမည္နဲ ့တြဲေခါ္ရပါတယ္။
Example → sys.exit()
from sys import *
ဒီတိုင္းေသခ်ာမသိဘူးဆို ဒါကိုလဲအေပါ္ကလိုေခါ္တယ္ပဲထင္မွာပါ။ တကယ္ေတာ့မတူဘူးဗ်
from sys import * ဆိုတာကက်ေတာ့သူက module ထဲကို sys ဆိုတဲ့ေကာင္ကိုမေခါ္ပဲနဲ ့sys ဆိုတဲ့ module ေအာက္ကေကာင္ေတြကိုဆြဲေခါ္လိုက္တာပါ။ ဒီေတာ့အေပါ္ကေကာင္နဲ ့မတူတာက သူ ့ေအာက္က function ေတြကိုေခါ္တဲ့အခါ module နာမည္နဲ ့ေခါ္ေနစရာမလိုပဲ တိုက္ရိုက္ေခါ္ခ်လိုက္လို ့ရသြားပါတယ္။
Example → exit()
ဒါေပမယ့္ from module import * လိုမ်ိုးသံုးတာမွာမေကာင္းတဲ့အခ်က္ရွိပါတယ္။ သင္အေပါ္မွာေရးခဲ့တဲ့ variable ကို override ျဖစ္သြားပါတယ္။
exit = 'Hello World'
from sys import *
ဒါဆို exit က 'Hello World' မပာုတ္ေတာ့ပါဘူး။
from sys import *
exit = 'Hello World'
ဒါက်ျပန္ေတာ့လဲ exit က sys.exit() မပာုတ္ေတာ့ပဲ 'Hello World' ျဖစ္သြားျပန္ပါတယ္။ ေနာက္ module ေတြထဲမွာလဲ function တူတာရွိပါေသးတယ္
from gzip import *
from os import *
အဲ့မွာသာ open() ဆိုရင္ gzip.open() ကိုေျပာတာလား os.open() ကိုေျပာတာလားဆိုျပီးတိုင္ပတ္ကုန္မွာပါ
ဒါပဲလားဆုိေတာ့မပာုတ္ေသးဘူး က်န္ပါေသးတယ္ from sys import * လို ့အသံုးျပုရင္ name ရဲ့ definition ကိုရွာရခက္ပါတယ္။ sys.exit() ဆိုရင္ေတာ့ဘယ္ကလဲတန္းသိေပမဲ့ from module import * လို ့သံုးတာမ်ိုးက၁ခုမကခဲ့ရင္ တိုင္ပတ္ျပီပဲကိုယ့္လူေရ ဘာလို့လဲဆိုေတာ့ import လုပ္ခဲ့တဲ့ module ေတြကေန exit() ရဲ့ definition ကိုလိုက္ရွာရေတာ့မွာပါ။
ဒါေပမယ့္အခုလိုမ်ိုးေတြေျပာလို ့ from module import ကမေကာင္းဘူးလို ့မေျပာဘူးေနာ္။ သူ ့မွာေကာင္းတာလဲရွိတယ္အဲ့တာကေတာ့တျခားမပာုတ္ဘူး performance မွာက် import module ထက္သာသြားတယ္။ ပိုျမန္တယ္ေပါ့ဗ်ာ.... ဘာလို ့လဲေျပာျပမယ္ :D
ထားပါေတာ့ sys ထဲက argv ဆိုတာကိုသံုးမယ္ဆို
sys.argv
အဲ့ေကာင္ကဘာလို ့ေနွးသလဲဆိုေတာ့ သူကအရင္ဆံုး sys ဆိုတဲ့ global namespace ကိုရွာတယ္ဗ်ျပီးေတာ့မွ argv ဆိုတဲ့ attribute ကိုရွာတယ္ ဒီလို၂ခါျဖစ္ေနေတာ့ျကာတာေပါ့ ဒါေပသိ
from sys import argv မွာက်ေတာ့သူက direct reference ျဖစ္ေနေတာ့ပိုျမန္သြားပါတယ္။ ဒါကဘယ္လိုေနရာမ်ိုးေတြမွာသိသာသလဲဆို attribute ကို သံုးျပီး looping ပတ္တဲ့အခ်ိန္မ်ိုးမွာ import module နည္းနဲ ့ from module import * နဲ့ကသိသာသြားပါတယ္။
ဘယ္ေကာင္ကေကာင္းလဲလို ့ေတာ့ ပံုေသေျပာလို ့ေတာ့မရဘူးေပါ့။ Performance ကုိအေလးေပးရမဲ့အခါမ်ိုးဆို from module import ကိုသံုးသင့္သလို variable names ေတြေတြကို override မျဖစ္ဖို ့ေနာက္ description ျပန္ေခါ္ဖို ့လြယ္ကူဖို ့အတြက္ပံုမွန္ဆို import module ကိုသံုးသင့္တယ္ေပါ့။ ဒါကေတာ့မိမိေရးတာေပါ္မွာလဲမူတည္ျပီးဆံုးျဖတ္ရမွာေပါ့။ အားနည္းခ်က္အားသာခ်က္ေတြကိုေျပာျပလိုက္လို့ သံုးဖို ့အတြက္ကိုစဥ္းစားမိသြားမယ္လို ့ထင္ပါတယ္။
PyLab (c) 2016


0 comments:
Post a Comment