প্রোগ্রামিং করতে গিয়ে প্রায়শই আমাদের কিছু ডাটা সংরক্ষণের প্রয়োজন হয় । এই ডাটা পাইথন কম্পিউটারের মেমরিতে সংরক্ষণ করতে পারে । ভ্যারিয়েবল হলো মেমরির একটা ব্লক যেখানে আমরা প্রয়োজনমত ডাটা সংরক্ষন করি । এরপর ভ্যারিয়েবলটাকে আমরা একটা নাম দিয়ে দেই যাতে ঐ ব্লকটাকে খুব সহজে আমরা ব্যবহার করতে পারি ।
name = "Abu Ashraf Masnun"
print name
এখানে দেখুন, আমরা প্রথমে একটা ভ্যারিয়েবল এ আমার নামটা সংরক্ষণ করলাম । এরপর ঐ ভ্যারিয়েবলটাকে নাম দিলাম name
। পরে যখন ঐ ভ্যারিয়েবলটা আউটপুট করার দরকার পড়লো তখন তাকে নাম ধরেই প্রিন্ট স্টেটমেন্ট এ ব্যবহার করলাম । এভাবেই মূলত আমরা ভ্যারিয়েবল এ নানা ধরনের ডাটা সংরক্ষণ করতে পারি ।
আমাদের উপরের উদাহরণে আমরা দেখলাম আমার নামটি কিভাবে সংরক্ষণ করলাম । নাম ছাড়াও আমাদের নানা ধরনের ডাটা সংরক্ষণ করার প্রয়োজন হয় - পূর্ণ সংখ্যা, দশমিক সহ পূর্ণ সংখ্যা, কোন কিছুর তালিকা ইত্যাদি । বিভিন্ন ধরণের ডাটা সংরক্ষণের জন্য তাই পাইথনের ভ্যারিয়েবলগুলো বিভিন্ন টাইপের হতে পারে ।
যে কোন ভ্যারিয়েবল কোন টাইপের ডাটা সংরক্ষণ করছে তা জানার জন্য আমরা বিল্ট ইন type()
ফাংশনটি ব্যবহার করতে পারি । এই ফাংশনটিকে কোন ভ্যারিয়েবল পাস করে দিলে এটি আমাদের জানিয়ে দিবে তার ডাটা টাইপ ।
পাইথন ইন্টারএ্যাক্টিভ শেল থেকে ঝটপট কিছু উদাহরন দেখে নেই:
>>> s = "string"
>>> type(s)
<type 'str'>
>>> integer = 45
>>> type(integer)
<type 'int'>
>>> float_val = 23.5
>>> type(float_val)
<type 'float'>
>>>
পাইথনে ভ্যারিয়েবলগুলো সহজেই তাদের ডাটার টাইপ পরিবর্তন করতে পারে । ধরুন একটি ভ্যারিয়েবল প্রথমে স্ট্রিং টাইপের ডাটা রাখতো, আমরা চাইলেই সেই ভ্যারিয়েবলটিতেই ইন্টিজার ভ্যালু এ্যাসাইন করতে পারি। এই যে ভ্যারিয়েবল এর টাইপ ইচ্ছামত পরিবর্তন করার সুযোগ - এটাকে বলা হয় ডাইনামিক টাইপিং । আর যদি একটা ভ্যারিয়েবল এর টাইপ পরবর্তীতে পরিবর্তন না করা যায়, তখন সেটাকে বলা হয় স্ট্যাটিক টাইপিং ।
পাইথনে ডাইনামিক টাইপিং সিস্টেম বিদ্যমান । তাই আমরা এরকম করতে পারি:
myvar = "hi"
print myvar
myvar = 23
print myvar
পাইথনে কোন একটি টাইপের ভ্যালুকে অন্য টাইপে কনভার্ট করতে গেলে সেটা এক্সপ্লিসিটলি করতে হয় । যেমন: ধরুন আপনার বয়স সংরক্ষণ করা আছে age
ভ্যারিয়েবলে । নাম আছে name
এ ।
age = 23
name = "masnun"
আপনি চাইছেন দুটোকে জোড়া দিয়ে একটি নতুন স্ট্রিং বানাতে । এখন age
যেহেতু ইন্টিজার, সেহেতু এটাকে প্রথমে স্ট্রিং এ কনভার্ট করে নিতে হবে, তবেই কিনা আপনি এ দুটোকে জোড়া লাগাতে পারবেন ।
print "I am " + str(age) +" years old"
কোন কোন ভাষায় এই টাইপ কনভার্শনটা অটোমেটিক্যালি করে নেয়, সেক্ষেত্রে সেটাকে উইক টাইপিং বলা হয় । পাইথন যেহেতু নিজে থেকে করে না, এটাকে তাই বলা হয় স্ট্রং টাইপিং ।
এখানে আমরা কিছু কমন ডাটা টাইপ দেখবো:
হ্যা কিংবা না, সত্য কিংবা মিথ্যা - কোন ভ্যারিয়েবল যখন ঠিক বিপরীতধর্মী দুইটা ভ্যালুর যে কোন একটা গ্রহন করে তখন আমরা সেটাকে সচারচর বুলিয়ান টাইপ দিয়ে প্রকাশ করি । পাইথনে একটা বুলিয়ান ভ্যারিয়েবল এর ভ্যালু হতে পারে হয় True
অথবা False
।
male = True
old = False
পাইথনের বিল্টইন bool()
ফাংশনটি ব্যবহার করে আমরা যে কোন টাইপের ভ্যারিয়েবল কে বুলিয়ানে কনভার্ট করতে পারি । এখানে কিছু উদাহরণ দেওয়া হলো:
print bool(True)
print bool(False)
print bool("text")
print bool("")
print bool(' ')
print bool(0)
print bool()
print bool(3)
print bool(None)
উপরের কোডটি রান করে আউটপুট দেখে বোঝার চেষ্টা করুন কি ভ্যালুর জন্য বুলিয়ান কি ভ্যালু পাওয়া যাবে ।
নান বা None
হচ্ছে বিশেষ ধরনের ডাটা টাইপ যেটা নির্দেশ করে এই ভ্যারিয়েবলটির কোন ভ্যালু নেই ।
>>> n = None
>>> type(n)
<type 'NoneType'>
>>>
বোঝাই যাচ্ছে এই টাইপের কাজ । বিভিন্ন ধরণের সংখ্যা ধারণ করার জন্য আমরা বিভিন্ন ধরণের টাইপ ব্যবহার করে থাকি ।
পূর্ণ সংখ্যার জন্য আমরা int
বা ইন্টিজার ব্যবহার করে থাকি ।
>>> type(age)
<type 'int'>
পাইথনের বিল্ট ইন int()
ফাংশনটি ব্যবহার করে আমরা অন্য টাইপ থেকে ইন্টিজারে কনভার্ট করতে পারি ।
দশমিক ঘর পর্যন্ত মান সংরক্ষণ করতে আমরা float
টাইপ ব্যবহার করি । যেমন:
>>> price = 23.45
>>> type(price)
<type 'float'>
>>>
এটির জন্যও float()
ফাংশনটি বিদ্যমান যেটির মাধ্যমে আমরা অন্য টাইপ থেকে ফ্লোট ভ্যালু পেতে পারি ।
টেক্সট ডাটা সংরক্ষণ করার জন্য আমরা স্ট্রিং ব্যবহার করে থাকি ।
my_string = "I am a Python developer!"
স্ট্রিং টাইপের জন্য বিল্ট ইন ফাংশন হলো - str()
সাধারণত কোন তালিকা সংরক্ষনের জন্য লিস্ট ব্যবহার করা হয় । (থার্ড) ব্রাকেটের ভিতরে কমা দিয়ে একেকটি আইটেম সেপারেট করে দিলেই লিস্ট তৈরি হয়ে যাবে । আসুন উদাহরণ দেখি:
my_list = [1,"a string",45.56]
print my_list[0]
print my_list[1]
print my_list[2]
লক্ষ্য করুন লিস্ট এ আমরা বিভিন্ন ধরনের ডাটা টাইপ সংরক্ষন করতে পারি একটা তালিকাবদ্ধ উপায়ে । আমরা চাইলেই এই তালিকার আইটেমগুলো ইচ্ছেমত পরিবর্তন করতে পারি । লিস্ট তৈরি করার জন্য বিল্ট ইন ফাংশন list()
।
টাপল ও লিস্ট এর মতই । শুধু মূল পার্থক্য টাপল এর আইটেমগুলো আমরা চাইলেই পরিবর্তন করতে পারি না ।
টাপল ডিফাইন করা হয় ()
ব্যবহার করে -
tpl = (1, 2, 3)
অন্য টাইপগুলোর মতই tuple()
ফাংশনটি কল করে আমরা টাপল পেতে পারি ।
সেট হচ্ছে আনঅর্ডার্ড লিস্ট - অর্থাৎ আইটেমগুলো কোন নির্দিষ্ট অর্থবহ অর্ডারে থাকে না । এবং সেট এর আইটেমগুলো ইউনিক হয় । অর্থাৎ একটি সেটে একই আইটেম একাধিকবার থাকতে পারে না । উদাহরণ:
>>> set1 = set(['a', 'b', 'c', 'c', 'd'])
>>> print set1
set(['a', 'c', 'b', 'd'])
>>>
এখানে দেখুন set()
ফাংশনে পাস করা লিস্টটিতে অনেক ডুপ্লিকেট ভ্যালু ছিলো । এটি থেকে আমরা যে সেটটি পেলাম সেটিতে ডুপ্লিকেট কোন ভ্যালু নেই! set()
ফাংশনটি কল করে নতুন সেট তৈরি করা যায় ।
ডিকশনারি হলো এমন একটি ডাটা টাইপ যেখানে আমরা একটি কি (key) এর সাথে মিল রেখে একটি ভ্যালু সংরক্ষণ করি । সহজে বলা যায়, ডিকশনারি হলো কতগুলো কি-ভ্যালু (key-value) জোড় এর সমষ্টি ।
>>> me = {"name": "masnun", "email": "masnun [at] transcendio.net"}
>>> me
{'name': 'masnun', 'email': 'masnun [at] transcendio.net'}
এখানে me
একটি ডিকশনারি যার name
কি এর ভ্যালু হলো masnun
।
পাইথনে টাইপ সিস্টেম অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে । পাইথনে অসংখ্যা বিল্ট ইন ও ইউজার ডিফাইনড টাইপ আছে । আলোচনার খাতিরে অধিক জনপ্রিয় টাইপগুলোর মধ্যেই আপাতত সীমাবদ্ধ থাকছি আমরা ।