কম্পিউটার টিউটোরিয়াল

পাইথন ২.x এবং পাইথন ৩.x-এর পার্থক্য


কোডিং কমিউনিটিতে সবসময় এই বিতর্ক থাকে যে কোন পাইথন ভার্সন শিখতে সেরা: পাইথন ২.x নাকি পাইথন ৩.x।

নিচে পাইথন ২.x এবং পাইথন ৩.x-এর মূল পার্থক্যগুলো দেওয়া হলো:

১. print ফাংশন

পাইথন ২.x-এ, "print" একটি স্টেটমেন্ট হিসেবে বিবেচিত হয় এবং পাইথন ৩.x স্পষ্টভাবে "print"-কে একটি ফাংশন হিসেবে বিবেচনা করে। এর মানে আপনাকে আপনার print-এর আইটেমগুলোকে স্ট্যান্ডার্ড উপায়ে ফাংশন প্যarethেসিসের ভেতরে পাস করতে হবে, অন্যথায় সিনট্যাক্স এরর পাবেন।

#Python 2.7
print 'Python', python_version()
print 'Hello, World!'
print('Hello, World!')
print "text", ; print 'some more text here'

আউটপুট

Python 2.7.6
Hello, World!
Hello, World!
text print some more text here
Python 3
import sys
print("Python version is %s.%s.%s" % sys.version_info[:3])
print('Hello, World!')
print("some text,", end="")
print('some more text here')

আউটপুট

Python version is 3.6.1
Hello, World!
some text,some more text here
>>> print "Hello"
Syntax Error: Missing parentheses in call to 'print'

২. ইন্টিজার ডিভিশন

পাইথন ২ আপনি যে সংখ্যাগুলো ডেসিম্যাল পয়েন্ট ছাড়া টাইপ করেন সেগুলোকে ইন্টিজার হিসেবে বিবেচনা করে, যা ডিভিশনের সময় অনপ্রত্যাশিত ফলাফল দিতে পারে। উদাহরণস্বরূপ, যদি আপনি পাইথন ২ কোডে 3 / 2 এক্সপ্রেশন টাইপ করেন, ইভ্যালুয়েশনের ফলাফল হবে ১, ১.৫ না जैसा আপনি আশা করতে পারেন। পাইথন ৩ কোডে শুধু x ব্যবহার করার বদলে float(x) ব্যবহার করার পরামর্শ দেয়া হয় (যদি কোডবেস পাইথন ২-এ পোর্ট করা হয়) অথবা পাইথন ২ স্ক্রিপ্টে from __future__ import division ব্যবহার করুন।

#Python 2

print 'Python', python_version()
print '3 / 2 =', 3 / 2
print '3 // 2 =', 3 // 2
print '3 / 2.0 =', 3 / 2.0
print '3 // 2.0 =', 3 // 2.0

আউটপুট

Python 2.7.6
3 / 2 = 1
3 // 2 = 1
3 / 2.0 = 1.5
3 // 2.0 = 1.0

#Python 3.6.1

import sys
print('Python %s.%s.%s' % sys.version_info[:3])
print('3 / 2 =', 3 / 2)
print('3 // 2 =', 3 // 2)
print('3 / 2.0 =', 3 / 2.0)
print('3 // 2.0 =', 3 // 2.0)

আউটপুট

Python 3.6.1
3 / 2 = 1.5
3 // 2 = 1
3 / 2.0 = 1.5
3 // 2.0 = 1.0

৩. ইউনিকোড স্ট্রিং

ডিফল্টভাবে, পাইথন ৩ স্ট্রিংগুলোকে ইউনিকোড হিসেবে সংরক্ষণ করে, тогда পাইথন ২-এ আপনাকে একটি স্ট্রিংকে "u" দিয়ে মার্ক করতে হয় যদি আপনি সেটিকে ইউনিকোড হিসেবে সংরক্ষণ করতে চান। ইউনিকোড স্ট্রিং ASCII স্ট্রিং থেকে বেশি ভার্সেটাইল, যেহেতু তারা বিদেশি ভাষার লেটারসহ ইমোজি এবং স্ট্যান্ডার্ড রোমান লেটার ও Нуমেরাল সংরক্ষণ করতে পারে।

#Python 2

>>> print type(unicode('this is like a python3 str type'))

>>> print type(b'byte type does not exist')

>>> print 'they are really' + b' the same'
they are really the same

#Python 3

import sys
print('Python %s.%s.%s' % sys.version_info[:3])
print('strings are now utf-8 \u03BCnico\u0394é!')
print('Python %s.%s.%s' % sys.version_info[:3], end="")
print(' has', type(b' bytes for storing data'))
print('Python %s.%s.%s' % sys.version_info[:3], end="")
print(' also has', type(bytearray(b'bytearrays')))

আউটপুট

Python 3.6.1
strings are now utf-8 μnicoΔé!
Python 3.6.1 has 
Python 3.6.1 also has 

"string" + b"bytes of data" এরর দেবে।

>>> print('they are really' + b' the same')
Traceback (most recent call last):
File "", line 1, in 
print('they are really' + b' the same')
TypeError: must be str, not bytes

৪. এক্সসেপশন রেইজ করা

পাইথন ৩ এক্সসেপশন রেইজ করার জন্য আলাদা সিনট্যাক্স বাধ্যতামূলক করে। যদি আপনি ইউজারকে এরর মেসেজ দেখাতে চান, তবে নিচের সিনট্যাক্স ব্যবহার করতে হবে:

raise IOError("your error message")

উপরোক্ত সিনট্যাক্স পাইথন ২ এবং পাইথন ৩ উভয়েই কাজ করে।

তবে নিচের কোড শুধু পাইথন ২-এ কাজ করে, পাইথন ৩-এ নয়:

raise IOError, "your error message"

৫. লিস্ট কম্প্রিহেনশন লুপ ভেরিয়েবল

পাইথন ২-এ, "for loop"-এ ইটারেট হওয়া ভেরিয়েবলকে গ্লোবাল ভেরিয়েবলের সাথে একই নাম দিলে গ্লোবাল ভেরিয়েবলের মান পরিবর্তন হয়ে যেতে পারে - যা সাধারণত আমরা চাই না। এই সমস্যাটি পাইথন ৩-এ ফিক্স করা হয়েছে, তাই আপনি আপনার "for loop"-এর কন্ট্রোল ভেরিয়েবলের জন্য ইতিমধ্যে ব্যবহার করা ভেরিয়েবল নাম ব্যবহার করতে পারেন, এটি লিক হয়ে আপনার কোডের বাকি ভেরিয়েবলগুলোর মান খারাপ করবে বলে চিন্তা করতে হবে না।

#Python 2
print 'Python', python_version()
i = 1
print 'before: i =', i
print 'comprehension: ', [i for i in range(5)]
print 'after: i =', i

আউটপুট

Python 2.7.6
before: i = 1
comprehension: [0, 1, 2, 3, 4]
after: i = 4

#Python 3

import sys
print('Python %s.%s.%s' % sys.version_info[:3])
i = 1
print('before: i =', i)
print('comprehension:', [i for i in range(5)])
print('after: i =', i)

আউটপুট

Python 3.6.1
before: i = 1
comprehension: [0, 1, 2, 3, 4]
after: i = 1

  1. উইন্ডোজ XP এবং উইন্ডোজ ৭-এর মধ্যে টপ ১০ পার্থক্য

  2. পাইথনে == এবং is অপারেটরের পার্থক্য

  3. পাইথন ২.x এবং ৩.x ভার্সনের পার্থক্যগুলো কী?

  4. পাইথন ২.৭.x এবং পাইথন ৩.x-এর মধ্যে মূল পার্থক্য