এই টিপস গুলো মনে রাখলে পাইথন শিখতে সুবিধা হবে । এগুলো আমাদের দৈনন্দিন জীবনে পাইথন ডেভেলপমেন্টের সময় নানাভাবে সাহায্য করবে ।
কমান্ড লাইনে শুধু পাইথন ইন্টারপ্রেটার রান করালে (কোন ফাইল নেইম ছাড়া) পাইথনের ইন্টারএক্টিভ শেল চালু হয় । এখানে কোন এক্সপ্রেশন টাইপ করলে পাইথন সাথে সাথে সেটিকে ইভ্যালুয়েট করে আউটপুট দেখাবে । যেহেতু বার বার ফাইলে সেইভ করে রান করার প্রয়োজন হয় না, তাই দ্রুত কোন কিছু টেস্ট করে দেখা বা প্রোটোটাইপিং এর জন্যে খুবই কাজের জিনিস এটি ।
অনেকেই এটাকে ক্যালকুলেটর হিসেবে ব্যবহার করে থাকে :)
$ python
Python 3.5.0 (v3.5.0:xxxxxxxxx, Sep 13 2015, 02:52:03)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] 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)
<class 'list'>
>>> type(my_list[0])
<class 'int'>
>>>
উপরের অংশ যদি মনযোগ দিয়ে লক্ষ্য করে থাকেন তাহলে দেখবেন type()
ফাংশনটি কোন চলক বা নামের ধরন বা টাইপ বলে দেয় । যেমনঃ type(my_list)
দিলে বোঝা গেল এটি একটি লিস্ট । type(my_list[0])
দিলে দেখা গেল এই লিস্টের প্রথম আইটেমের টাইপ ইন্টিজার । কোন ভ্যারিয়েবল এর টাইপ জানা না থাকলে এটি ব্যবহার করে জেনে নিতে পারি এটি কি টাইপ । এরপর সেই টাইপ অনুযায়ী পরবর্তী অপারেশন চালানো যায় ।
dir()
কমান্ডটি কোন অবজেক্টের ইন্সপেকশনে ব্যবহার করা হয় । এই ফাংশনটি ব্যবহার করে আমরা ঐ অবজেক্টের বিভিন্ন প্রোপার্টি এবং মেথডের নাম জানতে পারি ।
>>> details = dir(my_list)
>>> type(details)
<class '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")
এখানে আমরা স্পেইস এর পরিমান বাড়িয়ে দিয়ে নেস্টেড ব্লক তৈরি করলাম । একইভাবে স্পেইস এর পরিমান সমান পরিমানে কমিয়ে নিয়ে আগের ব্লকে ফিরে গেলাম ।
পাইথনের হোয়াইটস্পেস বেইজড ইন্ডেন্টেশন বুঝতে প্রথম প্রথম বেশ কষ্ট হয় । এজন্য দরকার অনুশীলন । নিজে নিজে ইন্ডেন্ট করার চেষ্টা করুন । গুগলে অনুসন্ধান করে দেখতে পারেন পাইথনের ইন্ডেন্টেশন নিয়ে ।