এই টিপস গুলো মনে রাখলে পাইথন শিখতে সুবিধা হবে । এগুলো আমাদের দৈনন্দিন জীবনে পাইথন ডেভেলপমেন্টের সময় নানাভাবে সাহায্য করবে ।
কমান্ড লাইনে শুধু পাইথন ইন্টারপ্রেটার রান করালে (কোন ফাইল নেইম ছাড়া) পাইথনের ইন্টারএক্টিভ শেল চালু হয় । এখানে কোন এক্সপ্রেশন টাইপ করলে পাইথন সাথে সাথে সেটিকে ইভ্যালুয়েট করে আউটপুট দেখাবে । যেহেতু বার বার ফাইলে সেইভ করে রান করার প্রয়োজন হয় না, তাই দ্রুত কোন কিছু টেস্ট করে দেখা বা প্রোটোটাইপিং এর জন্যে খুবই কাজের জিনিস এটি ।
আমি প্রায়ই এটাকে ক্যালকুলেটর হিসেবে ব্যবহার করি :)
$ python
Python 2.7.8 (default, Nov 15 2014, 03:09:43)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.51)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> my_list = [1, 2, 3, 5, 90]
>>> for x in my_list:
... print x
...
1
2
3
5
90
>>>পাইথনে প্রোগ্রামিং ও ডিবাগিং এর ক্ষেত্রে এই ফাংশনগুলো অত্যন্ত কাজের । এগুলো পাইথনের গ্লোবাল নেইমস্পেসের অংশ । তাই এগুলো কোন মডিউল ইম্পোর্ট করা ছাড়াই ব্যবহার করা যায় । শুরুতেই তাই এগুলোর ব্যবহার জানলে আমরা আমাদের নানা ধরনের সমস্যার সমাধানে এগুলোকে ব্যবহার করতে পারবো ।
>>> type(my_list)
<type 'list'>
>>> type(my_list[0])
<type 'int'>
>>>উপরের অংশ যদি মনযোগ দিয়ে লক্ষ্য করে থাকেন তাহলে দেখবেন type() ফাংশনটি কোন চলক বা নামের ধরন বা টাইপ বলে দেয় । যেমনঃ type(my_list) দিলে বোঝা গেল এটি একটি লিস্ট । type(my_list[0]) দিলে দেখা গেল এই লিস্টের প্রথম আইটেমের টাইপ ইন্টিজার । কোন ভ্যারিয়েবল এর টাইপ জানা না থাকলে এটি ব্যবহার করে জেনে নিতে পারি এটি কি টাইপ । এরপর সেই টাইপ অনুযায়ী পরবর্তী অপারেশন চালানো যায় ।
dir() কমান্ডটি কোন অবজেক্টের ইন্সপেকশনে ব্যবহার করা হয় । এই ফাংশনটি ব্যবহার করে আমরা ঐ অবজেক্টের বিভিন্ন প্রোপার্টি এবং মেথডের নাম জানতে পারি ।
>>> details = dir(my_list)
>>> type(details)
<type 'list'>
>>> len(details)
45
>>> details
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> 'extend' in details
True
>>>dir() ফাংশনটি একটি লিস্ট রিটার্ন করে । এই লিস্টটি আমরা প্রোগ্রাম্যাটিক্যালি আমাদের প্রয়োজনে ব্যবহার করতে পারি । বিশেষ করে যখন আমরা জানি না একটি ভ্যারিয়েবলে থাকা অবজেক্টটির বৈশিষ্ট্য কি বা এটি কি করতে পারে । এই লিস্ট দেখে আমরা কিছু ধারনা পাই এই অবজেক্ট এর সাধারন ব্যবহার সম্পর্কে ।
help() ফাংশনটি আমাদের কোন অবজেক্ট সমপর্কে সাহায্যকারী তথ্য সরবরাহ করে । মূলত এটি ইন্টার এ্যাকটিভ শেল থেকে সহজেই ডকুমেন্টেশন পড়তে সহায়তা করে থাকে -
>>> help(list)এই কমান্ডের মাধ্যমে আমরা লিস্ট টাইপ সম্পর্কে বিস্তারিত জানতে পারবো ।
$ python -i my_file.pyপাইথন কমান্ড লাইনে -i আর্গুমেন্ট এর ভ্যালু হিসেবে কোন পাইথন ফাইল নেইম পাস করলে পাইথন প্রথমে ঐ ফাইল টি রান করে এবং ফলাফল সহ ইন্টারএ্যাক্টিভ শেল চালু করে দেয় । ফলে আপনার ঐ ফাইলে আপনি যে সব অপারেশন চালাবেন, সেগুলো নিয়ে এই ইন্টারএ্যাক্টিভ শেলে কাজ করতে পারবেন । যেমন: পাইথন ফাইলটির মধ্যে ডিফাইন করা ভ্যারিয়েবলগুলো আপনি এই শেলে পাবেন । ডিবাগিং এবং দ্রুত প্রটোটাইপিং এটি বেশ কাজে দেয় ।
যে কোন প্রোগ্রামিং ল্যাঙ্গুয়েজেই কমেন্ট অত্যন্ত গুরুত্বপূর্ন বিষয় । কমেন্ট হল কোডের সেই অংশ বিশেষ যা ইন্টারপ্রেটার এক্সিকিউট করবে না । কমেন্ট লেখা হয় মূলত যারা পরবর্তীতে এই কোড পড়বেন তাদের জন্য । প্রোগ্রামের বিভিন্ন বিষয় সোর্স কোডের মধ্যেই ব্যখ্যা করা হয় কমেন্টের মাধ্যমে ।
পাইথনে আমরা পাউন্ড বা হ্যাশ ক্যারেক্টার ব্যবহার করে কমেন্ট লিখে থাকি । যেমন:
# this is a comment
print "this is not"
# my cool add function
# adds a and b
# then returns the value
def add(a,b):
return a+b # everything after the pound sign is a commentদেখা যাচ্ছে – কমেন্ট মাল্টিপল লাইনে হতে পারে, শুধু লাইনের শুরুতে পাউন্ড চিহ্ন বসালেই হল । একই লাইনে কিছু কোড এর পরে পাউন্ড সাইন ব্যবহার করে কমেন্ট লেখা যায় । তবে খেয়াল রাখা দরকার, একবার পাউন্ড সাইন দিয়ে কমেন্ট লেখা শুরু করলে তারপর থেকে ঐ লাইনের বাকিটা কমেন্ট হিসেবে বিবেচিত হবে । পাইথনে কমেন্ট শেষ করার ব্যবস্থা নেই, তাই সি বা জাভার মত কমেন্ট ব্লকও (/…./) সম্ভব না ।
অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ থেকে পাইথনে আসলে প্রথম যে সমস্যাটি চোখে পড়ে তাহল পাইথনের ইন্ডেন্টেশন বেইজড কোড ব্লক । পাইথনের একই ইন্ডেন্টেশন সম্বলিত পর পর অবস্থিত লাইন গুলো একই কোড ব্লকের অন্তর্ভুক্ত । উদাহরণ না দিলে হয়ত বিষয়টি স্পষ্ট হবে না ।
if True:
....print "hello world"
....print "Hi there"
....print "4 space indentation"এখানে আমরা ডট (.) দিয়ে স্পেইস বুঝিয়েছি । নিজে টাইপ করার সময় ডট এর পরিবর্তে স্পেইস ব্যবহার করুন না হলে প্রোগ্রাম রান করবে না । এখানে দেখুন ৩টি প্রিন্ট স্টেটমেন্ট আছে যারা একটির পর আরেকটি অবস্থিত এবং প্রত্যেকটি ৪টি স্পেইস দিয়ে ইন্ডেন্ট করা । এর ফলে এই প্রিন্ট স্টেটমেন্ট গুলো একটি কোড ব্লক হিসেবে কাজ করে । কোন স্টেটমেন্ট এ যদি একই ইন্ডেন্টেশন না থাকত সেক্ষেত্রে পাইথন এক্সেপশন (এরর) থ্রো করত ।
if True:
....print "hello world"
....print "Hi there"
....print "4 space indentation"
else:
....print "another block"
....print "same indentation as of the if block"
....print "but terminated with the else condition"এখানে দেখুন প্রথম ব্লকের পর ইন্ডেন্টেশন আগের জায়গায় ফিরিয়ে নিয়ে ব্লকের সমাপ্তি টানা হয়েছে । পরে আবার ৪ স্পেইস ইন্ডেন্ট করে আরেকটি ব্লকের সূচনা করা হয়েছে । আগের ব্লক এবং এই ব্লক দুটোরই একই ইন্ডেন্টেশন কিন্তু এরা একই ব্লক নয় । কারণ এদের মাঝে else আছে ।
এবার দেখি নেস্টেড ব্লক:
if True:
....print "hello world"
....print "Hi there"
....print "4 space indentation"
....if True:
........print "nested block"
........print "8 spaces"
....print "back to prev block"এখানে আমরা স্পেইস এর পরিমান বাড়িয়ে দিয়ে নেস্টেড ব্লক তৈরি করলাম । একইভাবে স্পেইস এর পরিমান সমান পরিমানে কমিয়ে নিয়ে আগের ব্লকে ফিরে গেলাম ।
পাইথনের হোয়াইটস্পেস বেইজড ইন্ডেন্টেশন বুঝতে প্রথম প্রথম বেশ কষ্ট হয় । এজন্য দরকার অনুশীলন । নিজে নিজে ইন্ডেন্ট করার চেষ্টা করুন । গুগলে অনুসন্ধান করে দেখতে পারেন পাইথনের ইন্ডেন্টেশন নিয়ে ।