## কুইক টিপস এই টিপস গুলো মনে রাখলে পাইথন শিখতে সুবিধা হবে । এগুলো আমাদের দৈনন্দিন জীবনে পাইথন ডেভেলপমেন্টের সময় নানাভাবে সাহায্য করবে । ### ইন্টারএক্টিভ শেল কমান্ড লাইনে শুধু পাইথন ইন্টারপ্রেটার রান করালে (কোন ফাইল নেইম ছাড়া) পাইথনের ইন্টারএক্টিভ শেল চালু হয় । এখানে কোন এক্সপ্রেশন টাইপ করলে পাইথন সাথে সাথে সেটিকে ইভ্যালুয়েট করে আউটপুট দেখাবে । যেহেতু বার বার ফাইলে সেইভ করে রান করার প্রয়োজন হয় না, তাই দ্রুত কোন কিছু টেস্ট করে দেখা বা প্রোটোটাইপিং এর জন্যে খুবই কাজের জিনিস এটি । অনেকেই এটাকে ক্যালকুলেটর হিসেবে ব্যবহার করে থাকে :) ```python $ 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()`, `dir()`, `help()` ফাংশন এর ব্যবহার পাইথনে প্রোগ্রামিং ও ডিবাগিং এর ক্ষেত্রে এই ফাংশনগুলো অত্যন্ত কাজের । এগুলো পাইথনের গ্লোবাল নেইমস্পেসের অংশ । তাই এগুলো কোন মডিউল ইম্পোর্ট করা ছাড়াই ব্যবহার করা যায় । শুরুতেই তাই এগুলোর ব্যবহার জানলে আমরা আমাদের নানা ধরনের সমস্যার সমাধানে এগুলোকে ব্যবহার করতে পারবো । ```python >>> type(my_list) >>> type(my_list[0]) >>> ``` উপরের অংশ যদি মনযোগ দিয়ে লক্ষ্য করে থাকেন তাহলে দেখবেন `type()` ফাংশনটি কোন চলক বা নামের ধরন বা টাইপ বলে দেয় । যেমনঃ `type(my_list)` দিলে বোঝা গেল এটি একটি লিস্ট । `type(my_list[0])` দিলে দেখা গেল এই লিস্টের প্রথম আইটেমের টাইপ ইন্টিজার । কোন ভ্যারিয়েবল এর টাইপ জানা না থাকলে এটি ব্যবহার করে জেনে নিতে পারি এটি কি টাইপ । এরপর সেই টাইপ অনুযায়ী পরবর্তী অপারেশন চালানো যায় । ```dir()``` কমান্ডটি কোন অবজেক্টের ইন্সপেকশনে ব্যবহার করা হয় । এই ফাংশনটি ব্যবহার করে আমরা ঐ অবজেক্টের বিভিন্ন প্রোপার্টি এবং মেথডের নাম জানতে পারি । ```python >>> details = dir(my_list) >>> type(details) >>> 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()` ফাংশনটি আমাদের কোন অবজেক্ট সমপর্কে সাহায্যকারী তথ্য সরবরাহ করে । মূলত এটি ইন্টার এ্যাকটিভ শেল থেকে সহজেই ডকুমেন্টেশন পড়তে সহায়তা করে থাকে - ```python >>> help(list) ``` এই কমান্ডের মাধ্যমে আমরা লিস্ট টাইপ সম্পর্কে বিস্তারিত জানতে পারবো । ### কমান্ড লাইনে `-i` আর্গুমেন্ট এর ব্যবহার ```bash $ python -i my_file.py ``` পাইথন কমান্ড লাইনে `-i` আর্গুমেন্ট এর ভ্যালু হিসেবে কোন পাইথন ফাইল নেইম পাস করলে পাইথন প্রথমে ঐ ফাইল টি রান করে এবং ফলাফল সহ ইন্টারএ্যাক্টিভ শেল চালু করে দেয় । ফলে আপনার ঐ ফাইলে আপনি যে সব অপারেশন চালাবেন, সেগুলো নিয়ে এই ইন্টারএ্যাক্টিভ শেলে কাজ করতে পারবেন । যেমন: পাইথন ফাইলটির মধ্যে ডিফাইন করা ভ্যারিয়েবলগুলো আপনি এই শেলে পাবেন । ডিবাগিং এবং দ্রুত প্রটোটাইপিং এটি বেশ কাজে দেয় । ### কমেন্টস যে কোন প্রোগ্রামিং ল্যাঙ্গুয়েজেই কমেন্ট অত্যন্ত গুরুত্বপূর্ন বিষয় । কমেন্ট হল কোডের সেই অংশ বিশেষ যা ইন্টারপ্রেটার এক্সিকিউট করবে না । কমেন্ট লেখা হয় মূলত যারা পরবর্তীতে এই কোড পড়বেন তাদের জন্য । প্রোগ্রামের বিভিন্ন বিষয় সোর্স কোডের মধ্যেই ব্যখ্যা করা হয় কমেন্টের মাধ্যমে । পাইথনে আমরা পাউন্ড বা হ্যাশ ক্যারেক্টার ব্যবহার করে কমেন্ট লিখে থাকি । যেমন: ```python # 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 ``` দেখা যাচ্ছে – কমেন্ট মাল্টিপল লাইনে হতে পারে, শুধু লাইনের শুরুতে পাউন্ড চিহ্ন বসালেই হল । একই লাইনে কিছু কোড এর পরে পাউন্ড সাইন ব্যবহার করে কমেন্ট লেখা যায় । তবে খেয়াল রাখা দরকার, একবার পাউন্ড সাইন দিয়ে কমেন্ট লেখা শুরু করলে তারপর থেকে ঐ লাইনের বাকিটা কমেন্ট হিসেবে বিবেচিত হবে । পাইথনে কমেন্ট শেষ করার ব্যবস্থা নেই, তাই সি বা জাভার মত কমেন্ট ব্লকও (/*….*/) সম্ভব না । ### ইন্ডেন্টেশন অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ থেকে পাইথনে আসলে প্রথম যে সমস্যাটি চোখে পড়ে তাহল পাইথনের ইন্ডেন্টেশন বেইজড কোড ব্লক । পাইথনের একই ইন্ডেন্টেশন সম্বলিত পর পর অবস্থিত লাইন গুলো একই কোড ব্লকের অন্তর্ভুক্ত । উদাহরণ না দিলে হয়ত বিষয়টি স্পষ্ট হবে না । ```python if True: ....print("hello world") ....print("Hi there") ....print("4 space indentation") ``` এখানে আমরা ডট (.) দিয়ে স্পেইস বুঝিয়েছি । নিজে টাইপ করার সময় ডট এর পরিবর্তে স্পেইস ব্যবহার করুন না হলে প্রোগ্রাম রান করবে না । এখানে দেখুন ৩টি প্রিন্ট স্টেটমেন্ট আছে যারা একটির পর আরেকটি অবস্থিত এবং প্রত্যেকটি ৪টি স্পেইস দিয়ে ইন্ডেন্ট করা । এর ফলে এই প্রিন্ট স্টেটমেন্ট গুলো একটি কোড ব্লক হিসেবে কাজ করে । কোন স্টেটমেন্ট এ যদি একই ইন্ডেন্টেশন না থাকত সেক্ষেত্রে পাইথন এক্সেপশন (এরর) থ্রো করত । ```python 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 আছে । এবার দেখি নেস্টেড ব্লক: ```python 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") ``` এখানে আমরা স্পেইস এর পরিমান বাড়িয়ে দিয়ে নেস্টেড ব্লক তৈরি করলাম । একইভাবে স্পেইস এর পরিমান সমান পরিমানে কমিয়ে নিয়ে আগের ব্লকে ফিরে গেলাম । পাইথনের হোয়াইটস্পেস বেইজড ইন্ডেন্টেশন বুঝতে প্রথম প্রথম বেশ কষ্ট হয় । এজন্য দরকার অনুশীলন । নিজে নিজে ইন্ডেন্ট করার চেষ্টা করুন । গুগলে অনুসন্ধান করে দেখতে পারেন পাইথনের ইন্ডেন্টেশন নিয়ে ।