C++ நிரலைத் தருவித்துக் கொள்வதற்கான பைத்தான்
நிரல்
பைத்தான் பல கூறுநிலைகளைக் கொண்டுள்ளது. ஒரு சிக்கலுக்கு நிரலர்கள் பல தரப்பட்ட கூறுநிலைகளைத் தங்கள் வசதிக்கேற்ப பயன்படுத்திக் கொள்ள பைத்தான் அனுமதிக்கிறது. இப்பொழுது நாம் கற்றுக் கொள்ளவிருக்கும் பைத்தான் நிரல், அடிப்படை பைத்தான் நிரலில் நீங்கள் அறிந்திராத சில புதிய கட்டளைகளைக் கொண்டுள்ளது. இந்த அதிகாரத்தில், நிரல்கள் இரண்டு வெவ்வேறு மொழிகளின் ஒருங்கிணைப்பைப் பெற்றுள்ளதால், os,Sys மற்றும் getopt போன்ற கூறுநிலைகளைத் தருவித்துக் கொள்ள வேண்டும்.
கூறுநிலை நிரலாக்கம் என்பது உங்கள் குறிமுறையை சிறுசிறு பகுதிகளாக
பிரிப்பதற்கான மென்பொருள் வடிவமைப்பு நுட்பமாகும். இந்த பகுதிகள் கூறுநிலைகள் என்றழைக்கப்படுகின்றன.
இந்த பிரித்தலின் போது கூறுநிலைகள் என்றழைக்கப்படுகிறது. இந்த பிரித்தலின் போது கூறுநிலைகள்
மற்ற பிற கூறுநிலைகளின் மீது குறைந்த அளவிலோ அல்லது இல்லாமாலோ சார்ந்திருப்பதை கவனத்தில்
கொள்ள வேண்டும். வேறுவகையில், கூறவேண்டுமெனில் சார்பு நிலையை குறைத்தலே நோக்கமாகும்.
ஆனால், நாம் பைத்தானில் கூறுநிலைகளை எவ்வாறு உருவாக்குவோம்?
பைத்தானில் கூற்றுகள் மற்றும் வரையறைகளைக் கொண்டுள்ள கோப்பு கூறுநிலை எனப்படுகிறது.
பைத்தான் குறிமுறையை கொண்டிருக்கும் கோப்பு எடுத்துக்காட்டாக, factorial.py என்பதனை
கூறுநிலை என்றும், factorial என்பது கூறுநிலையின் பெயரைக் குறிக்கும். நாம் கூறுநிலைகளைக்
கையாளக்கூடிய, ஒருங்கமைக்கப்பட்ட சிறிய கோப்புகளாக பிரித்து பயன்படுத்துகிறோம். மேலும்,
கூறுநிலை, குறிமுறையின் மறுபயனபாக்கத்தை வழங்குகிறது. வெவ்வேறு நிரல்களில், நாம் மிகுதியாக
பயன்படுத்தும் செயற்கூறு வரையறைகளை நகலெடுப்பதற்கு பதிலாக, அவற்றை ஒரு கூறுநிலையில்
வரையறுத்து, தருவித்துக் கொள்ளலாம்.
எடுத்துக்காட்டு
def fact(n):
f=1
if n == 0:
return 0
elif n == 1:
return 1
else:
for i in range(1, n+1):
f= fi
print (f)
வெளியீடு
>>>fact (5)
120
மேற்கண்ட எடுத்துக்காட்டு factorial.py என பெயரிடப்பட்டுள்ளது.
ஒரு கூறுநிலைக்குள் மற்றொரு கூறுநிலையின் வரையறைகளைத் தருவித்துக்
கொள்ளலாம். அவ்வாறு செய்வதற்கு நாம் 'import' என்ற சிறப்பு சொல்லைப் பயன்படுத்த முடியும்.
நாம் முன்னதாக வரையறுத்த factorial என்ற கூறுநிலையைத் தருவித்துக் கொள்ள, பைத்தான்
தூண்டுகுறியில் கீழ்க்கண்டவாறு தட்டச்சு செய்யவும்.
>>> import factorial
கூறுநிலைக்குள் வரையறுக்கப்பட்ட செயற்கூறுகளை, கூறுநிலையின்
பெயரைப் பயன்படுத்தி அணுக முடியும். செயற்கூறுகளை அணுக புள்ளிச் செயற்குறி பயன்படுத்தப்படுகிறது
கூறுநிலையிலிருந்து செயற்கூறுகளை அணுகுவதற்கான தொடரியல்
<module name>. <function name>
எடுத்துக்காட்டு
பைத்தான் அடிப்படை (உள்ளிணைந்த) கூறுநிலைகள் பலவற்றைக் கொண்டுள்ளது.
பயனர் வரையறுத்த கூறுநிலைகளைத் தருவிப்பது போன்றே அடிப்படை கூறுநிலைகளையும் தருவித்துக்
கொள்ளலாம். நீங்கள் தற்போது C++ குறிமுறையை இயக்கும்பைத்தான் நிரலுக்கு தேவையான அடிப்படை
கூறுநிலைகளைக் காணப் போகிறீர்கள்.
(i) பைத்தானின் sys கூறுநிலை
இந்த கூறுநிலை வரிமொழி மாற்றியால் பயன்படுத்தப்படுகிறது.
sys.argv
sys.argv என்பது
பைத்தான் நிரலுக்கு அனுப்பி வைக்கப்படும் கட்டளை வரி செயலுருபுகளின் பட்டியலாகும்.
argv கட்டளை வரி உள்ளீட்டு வழியாக வரும் உருப்படிகள் அனைத்தையும் கொண்டிருக்கும். இது,
அடிப்படையில், நிரலின் கட்டளை வரி செயலுருபுகளைக் கொண்ட ஓர் அணியாகும்.
sys.argv ஐ பயன்படுத்த, முதலில் நீங்கள் sys கூறுநிலையைத் தருவித்துக்
கொள்ள வேண்டும். முதல் செயலுருபு sys.argv[0] எப்பொழுதும் செயல்படுத்த வேண்டிய நிரலின்
பெயராக இருக்கும். மேலும், sys.argv[1] என்பது நிரலுக்கு (இங்கு இது C++கோப்பு)
அனுப்பப்படும் முதல் செயலுருபு ஆகும்.
main(sys.argv[1])
நிரல்
கோப்பையும் (பைத்தான் நிரல்), உள்ளீட்டு கோப்பினை (C++ கோப்பு) பட்டியலாகவும் (அணி)
பெற்றுக் கொள்கிறது. argv[0] அனுப்பப்பட தேவையில்லாத பைத்தான் நிரலைக் கொண்டிருக்கும்.
ஏனெனில் defaultmain மூலக் குறிமுறையைக் குறிக்கும். செயல்படுத்த வேண்டிய கோப்பின்
பெயரைக் குறிக்கும்.
(ii) பைத்தானில் OS கூறுநிலை
பைத்தானில் இருக்கும் OS கூறுநிலை இயக்க முறைமையை சார்பு செயல்பாட்டுடன்
பயன்படுத்துவதற்கான ஒரு வழிமுறையை வழங்குகிறது. பைத்தான் இயங்கிக் கொண்டிருக்கும்போது,
விண்டோஸ் இயக்க முறைமையுடன் OS கூறுநிலை ஊடாட அனுமதிக்கும் செயற்கூறுகளாவன்.
Os.system() : செயல்தளத்தில்(Shell)C++ தொகுத்தலுக்கான
கட்டளையை இயக்கும். (இங்கு இது ஒரு கட்டளை சாளரம்) உதாரணத்திற்கு, C++ நிரலைத் தொகுக்க
g++ தொகுப்பி செயல்படுத்தப்பட வேண்டும். இதை செயல்படுத்த, பின்வரும் கட்டளைப் பயன்படுத்தப்படுகின்றது.
os.system (g++'+ <variable_namel> '-<mode>' +
<variable_name2>
இங்கு,
Os.system
:-
OS கூறுநிலையில் வரையறுக்கப்பட்டுள்ள system() செயற்கூறு
g++ :- Windows
இயக்கமுறைமையில் C++ நிரலை தொகுப்பதற்கான பொதுவான தொகுப்பி
variable_namel
:-
(.cpp) என்ற நீட்டிப்பு இல்லாமல் C++ கோப்பின் பெயர் சர வடிவமைப்பில் குறிப்பிடப்பட்டிருக்கும்.
Mode :- உள்ளீடு/வெளியீட்டு
பாங்கினை குறிக்கிறது. இங்கு இது hypen முன்னொட்டுடன் 0 என்று உள்ளது.
variable_name2
:-
(.exe) என்ற நீட்டிப்பு இல்லாமல் இயக்குக் கோப்புப் பெயர் சர வடிவமைப்பில் குறிப்பிடப்பட்டிருக்கும்.
உதாரணமாக,
C++ நிரலை தொகுத்து, இயக்குவதற்கான கட்டளை கீழே கொடுக்கப்பட்டுள்ளது.
குறிப்பு
OS.system()ல்
‘+' என்பது அனைத்து சரங்களும் ஒரே சரமாக இணைக்கப்பட்டு பட்டியலாக அனுப்பப்படுகிறது
என்பதைக் குறிக்கிறது.
(iii) பைத்தான் getopt கூறுநிலை
பைத்தானில் getopt கூறுநிலை கட்டளை வரி தேர்வுகளையும், செயலுருபுகளையும்
பிரித்தெடுக்க உங்களுக்கு உதவும். இந்த கூறுநிலை கட்டளைவரி செயலுருபு பிரித்தெடுத்தலை
செயல்படுத்த செயற்கூறுகளை வழங்குகிறது.
getopt.getopt வழிமுறை
இந்த வழிமுறை கட்டளை வரி தேர்வுகளையும், செயலுருபுகள் பட்டியலையும்
பிரித்தெடுக்கும். இந்த வழிமுறைக்கான தொடரியல் பின்வருமாறு
<opts>,<args>=getopt.getopt(argv, options,
[long_options])
செயலுருபுகளின் விவரங்களை இங்கே காணலாம்.
argv- இது பிரிக்கப்பட வேண்டிய
செயலுருபின் மதிப்புகளின் பட்டியலைக் குறிக்கும். நமது நிரலில், கட்டளை முழுமையும்
பட்டியலாக அனுப்பப்படுகிறது.
options- இது பைத்தான் நிரல் உள்ளீடு அல்லது வெளியீட்டிற்கான
தேர்வு எழுத்துக்களின் சரமாகும். இங்கு “I” அல்லது “o'' போன்ற தேர்வுகளும், அதைத் தொடர்ந்து
முக்காற்புள்ளியும் (:) அமைந்திருக்கும். இங்கு (:) பாங்கினை குறிப்பிடப் பயன்படுகிறது.
long_options - இந்த அளபுரு சரங்களின் பட்டியலுடன் செலுத்தப்படுகிறது.
Long options-ன் செயலுருபைத் தொடர்ந்து ('=') என்ற சமக்குறி இடம்பெற வேண்டும். நம்முடைய
நிரலில் C++ கோப்பின் பெயர் சரமாக செலுத்தப்படும். மேலும், அது ஒரு உள்ளீடு கோப்பு
என்பதைக் குறிக்க, அதனுடன் '1' என்ற தேர்வும் செலுத்தப்படும்.
getopt() method returns value consisting of two elements. வழிமுறை
இரண்டு உறுப்புகளை கொண்டுள்ள மதிப்புகளை திருப்பியனுப்பும். இவை ஒவ்வொன்றும் தனித்தனியாக
opts மற்றும் args என்ற இரண்டு வெவ்வேறு பட்டியலில் (அணிகள்) சேமிக்கப்படும். Opts
பாங்கு,பாதைப் போன்ற பிரிக்கப்பட்ட சரங்களின் பட்டியலைக் கொண்டிருக்கும். Args, தவறான
பாதை அல்லது பாங்கின் காரணமாக பிரிக்கப்பட முடியாத எந்தவொரு சரத்தின் பட்டியலைக் கொண்டிருக்கும்.
geopt() வழிமுறையின் மூலம் சரங்களை பிரித்தெடுக்கும் போது பிழையேதும் இல்லாவிட்டால்
args வெற்று அணியாக அமையும்.
உதாரணத்திற்கு, p4 என்ற C++ கோப்பினை, கட்டளை வரியில் இயக்கப்போகும்
பைத்தான் நிரல், பின்வரும் ஒன்றைப் போல getopt() வழிமுறையைக் கொண்டிருக்கும்.
opts,
args = getopt.getopt (argv, "i:",['ifile=']).
நம்முடைய எடுத்துக்காட்டுகளில், கட்டளைவரி கட்டளைகளை அனைத்தும்
பிரிக்கப்பட்டிருப்பதாலும், செயலுருபு மீதமில்லாமலிருப்பதாலும், இரண்டாவது செயலுருபு
args வெறுமையாக இருக்கும் [ ]. Print() கட்டளையைப் பயன்படுத்தி args வெளிக்காட்டப்பட்ட
செய்திருந்தால், வெளியீடு () என இருக்கும்.
>>>print(args)
[]
குறிப்பு
பைத்தானில்
அடிப்படை கூறுநிலைகளின் பட்டியலையும், அவை எதற்காக பயன்படுத்தப்படுகிறது என்பதையும்
நீங்கள் சரிபார்த்துக் கொள்ள முடியும். இந்த கோப்புகள் பைத்தானை நீங்கள் நிறுவி இருக்கும்
அமைவிடத்தில், Lib கோப்புறையில் இருக்கும் C++ நிரலை wrap செய்வதற்கான மேலும் சில கட்டளைகள்.
Some
more command for wrapping C++ code
if _name_=='_main_':
main(sys.argv[1:])
__name__ (A Special variable) in Python
பைத்தானில் main() செயற்கூறு இல்லையென்பதால், வரிமொழி மாற்றிக்கு
(interpreter) பைத்தான் நிரலை இயக்குவதற்கான கட்டளைக் கொடுக்கும்போது, 0 (பூஜ்யம்)
நிலையில் 0 level உள்தள்ளப்பட்ட குறிமுறை இயக்கப்பட வேண்டும். இருப்பினும், வரிமொழி
மாற்றி இதனை செய்வதற்கு முன், சில சிறப்பு மாறிகளை வரையறுத்துக்கொள்ளும். _name_ என்பது
அத்தகைய சிறப்புமாறி, தானமைவாக, கோப்பின் பெயரை இருத்திக்கொள்ளும். மூலக்கோப்பு முதன்மை
நிரலாக இயக்கப்படுமேயானால், வரிமொழி மாற்றி, _name_மாறிக்கு "_main_” என்ற மதிப்பினை
அமைத்துக் கொடுக்கும்.
__name_என்பது தற்போதைய கூறுநிலையை மதிப்பீடு செய்யும் ஒரு உள்ளிணைந்த
மாறியாகும். இதனால் தற்போதைய script தானாகவே இயங்கி கொண்டிருக்கிறதா என்பதை சோதிக்கப்பயன்படுகிறது.
உதாரணத்திற்கு
பின்வருவனவற்றை நோக்குங்கள்
if __name_ =='_main_':
main (sys.argv[1:])
கட்டளை வரியில் பைத்தான் நிரல், தானே முதலில் செயல்பட போகிறதென்றால்,
_main_அந்த பைத்தான் நிரலின் பெயரைக் கொண்டிருக்கும். மேலும், பைத்தானில் சிறப்பு மாறியான,
_name_ என்பதும் பைத்தான் நிரலின் பெயரைக் கொண்டிருக்கும். மேலும், பைத்தானின் சிறப்பு
மாறியான _name_ என்பதும்பைத்தான் நிரலின் பெயரைக் கொண்டிருக்கும். நிபந்தனை சரியெனில்
அது main அழைக்கப்பட்டு, C++ கோப்பினை செயலுருபாக அனுப்பி வைக்கப்படும்.
குறிப்பு
sys.argv[1:]
- பெருக்குப்பின் கோப்பு பெயர் அனைத்தையும் பெறவும்.
sys.argv[0:]-Script
name (பைத்தான் நிரல்)
நீங்கள்
பாடம் 8-ல் String slicing என்று படித்ததை நினைவில் கொள்ளுங்கள்