مقایسه ورژن های پایتون 2 و 3 [ آموزش مقدماتی پایتون قسمت صفر ]

  • چهارشنبه ۱۵ آبان, ۱۳۹۸

بیشتر آموزش هایی که درباره زبان برنامه نویسی پایتون وجود دارد به دلیل قدیمی بودن بر اساس ورژن 2 پایتون است. اما در قسمت صفرم از آموزش مقدماتی پایتون قصد داریم تا این دو ورژن را با یکدیگر مقایسه کنیم و تفاوت های هر کدام را بگوییم.

پیش از این در نوشته ای جداگانه به مزایای زبان برنامه نویسی پایتون پرداخته بودیم و گفتیم که چرا بسیاری پایتون را انتخاب می کنند.

در قسمت صفرم از سری آموزش مقدماتی پایتون قرار است درباره این باشد که بهترین نسخه پایتون کدام است؟

چرا که در قسمت های بعدی از این سری آموزشی می خواهیم با پایتون ورژن 3 کار کنیم و بنابراین سعی داریم تا در قسمت صفر تفاوت هایی که در کدنویسی هر کدام وجود دارد را توضیح دهیم.

کوتاه درباره پایتون ورژن

پایتون 2 فرآیند کدنویسی را ساده تر از نسخه های قبل از خود کرد. در این نسخه جزئیات فنی Python Enhancement Proposal (PEP) در نظر گرفته شده است. پایتون 2.7 که آخرین ورژن از سری 2 است توسط توسعه دهدنگانش ترک شده و در سال 2020 به طور کامل متوقف می شود. یعنی هیچ پشتیبانی از آن صورت نمی گیرد.

تنها در صورتی ممکن است بخواهید که از پایتون 2 استفاده کنید یا با آن کد بنویسید که بر روی یک پروژه از قبل نوشته شده با پایتون 2 کار کنید. یا برای مثال نیاز به یک کتابخانه یا کد خاصی دارید که برای پایتون 2 نوشته شده است.

کوتاه درباره پایتون ورژن 3

در دسامبر 2008، بنیان پایتون نسخه 3 از این زبان برنامه نویسی را منتشر کرد. این نسخه اساسا به این منظور عرضه شد تا مشکلاتی که در پایتون 2 وجود دارد را حل کند. اما طبیعت این تغییرات به گونه ای بود که پایتون 3 را با پایتون 2 ناسازگار کرد.

بنابراین، برای هر سازمانی که از پایتون 2 استفاده می کرد، تغییر دادن پروژه هایشان به نسخه 3 نیازمند ایجد کلی تغییرات بود. این تغییرات فقط هم شامل تغییر دادن به کد های برنامه نمی شد بلکه باید در کتابخانه هایی که از آن ها به عنوان بخشی از محیط پایتون استفاده می کردند نیز تغییراتی ایجاد می شد.

اگر قرار به مقایسه ورژن های پایتون و انتخاب بهترین ورژن باشد، قطعا پایتون 3 با اختلاف زیاید، پیروز می شود. مهم ترین دلیل آن هم این است که پایتون 2 از سال 2020 دیگر در دسترس نخواهد بود. بنابراین جهت گیری همه توسعه دهندگان به سوی پایتون 3 خواهد بود.

با همه این ها اگر می خواهید شروع به یادگیری زبان برنامه نویسی پایتون کنید، پیشنهاد ما انتخاب ورژن 3 است اما اگر شغلی که دارید از شما می خواهید که با پایتون 2 کار کنید، این می تواند دلیلی برای انتخاب ورژن 2 باشد.

مقایسه ورژن های 2 و 3 پایتون

اساس کدنویسی در زبان پایتون چه ورژن 2 و چه 3 یکی است.

تفاوت های پایتون 2 با 3

با این حال یک سری تفاوت هایی در Syntax ها وجود دارد که اگر در جریان آن ها نباشید ممکن است نتوانید مثال هایی را که در وب می بینید را درست در سیستم خود اجرا کنید چرا که به زبان پایتون 2 نوشته شده اند و اما شما از پایتون 3 استفاده می کنید.

ماژول __future__

در پایتون 3 یک سری کلیدواژه ها و ویژگی هایی ارائه شد که با ایمپورت کردن ماژول future می توان به آن ویژگی ها و کلیدواژه ها در پایتون 2 هم دسترسی داشت. اگر در آینده قصد دارید که برنامه شما از پایتون 3 پشتیبانی کند، پیشنهاد می شود که از ماژول future در برنامه خود که با پایتون 2 نوشته است، استفاده کنید.

برای مثال، اگر بخواهیم قابلیت تقسیم در پایتون 3 (که حاصل تقسیم عددی اعشاری خواهد بود) را در پایتون 2 داشته باشیم، ماژول زیر را در برنامه خود فراخوانی می کنیم.

from __future__ import division
print 8/7  # prints 1.1428571428571428

تابع print

قابل توجه ترین تغییری که در پایتون 3 به وجود آمده است، چگونگی استفاده از تابع print که برای چاپ رشته ای در صفحه نمایش استفاده می شود، است. در پایتون 3 استفاده از () الزامی است؛ در پایتون 2 اما اختیاری بود.

print "Hello World"
print ("Hello World)

در کد بالا، خط اول فقط در پایتون 2 صحیح است، اما خط دوم هم در پایتون و هم در پایتون 3 صحیح است.

دریافت ورودی از صفحه کلید

در پایتون 2 دریافت ورودی به دو شیوه انجام می شود؛ تابع input() و تابع raw_input() هر دو ورودی دریافت می کنند اما ورودی که از طریق input() دریافت می شود اگر در داخل ” یا “” باشد به عنوان رشته در نظر گرفته می شود در غیر این صورت به عنوان عدد در نظر گرفته می شود.

در پایتون 3، تابع raw_input() منسوخ شده و بنابراین دریافت ورودی همیشه به عنوان رشته در نظر گرفته می شود.

In Python 2
       x = input('something:') 
       something:10 #entered data is treated as number
       x
       10
       x = input('something:')
       something:'10' #entered data is treated as string
       x
       '10'
       x = raw_input("something:")
       something:10 #entered data is treated as string even without ''
       x
       '10'
       x = raw_input("something:")
       something:'10' #entered data treated as string including ''
       x
       "'10'"         
 In Python 3
       x = input("something:")
       something:10
       x
       '10'
       x = input("something:")
       something:'10' #entered data treated as string with or without ''
       x
       "'10'"
       x = raw_input("something:") # will result NameError
       Traceback (most recent call last):
          File "", line 1, in 
         
       x = raw_input("something:")
       NameError: name 'raw_input' is not defined         

تقسیم عدد صحیح

در پایتون2، نتیجه تقسیم دو عدد صحیح به نزدیک ترین عدد صحیح گرد می شود. بنابراین نتیجه 3/2 برابر 1 خواهد بود. برای این که نتیجه تقسیم اعشاری شود، باید مقسوم یا مقسوم علیه اعشاری باشد. یعنی 3.0/2 یا 3/2.0 برابر با 1.5 خواهد بود.

درپایتون 3 به صورت پیشفرض نتیجه 3/2 برابر 1.5 خواهد بود که برای نتیجه مطلوب تری برای برنامه نویسان است.

نمایش یونیکد

در پایتون 2 اگر می خواهید یک رشته به صورت یونیکد نگهداری شود می بایست تا آن رشته را با u مشخص کنید.

اما در پایتون 3 رشته به صورت پیشفرض در حالت یونیکد نگهداری می شود. رشته ها یونیکد utf-8 هستند و کلاس های دو بایتی byte و آرایه های بایتی نیز داریم.

حذف شدن تابع xrange()

در پایتون 2 تابع range() یک لیست بر می گرداند و xrange() یک شی بر می گرداند که وقتی نیاز باشد آیتم های داخل محدوده را می سازد که باعث مصرف کمتر حافظه می شود.

در پایتون 3 تابع range() حذف شده و xrange() به range() تغییر نام داده است.

وقوع exception

درست مانند تابع print در صورتی که برای ایجاد یک exception در پایتون 3 نوع exception را در پرانتز قرار ندهیم، کامپایل برنامه با خطا همراه خواهد بود.

raise IOError, "file error" #This is accepted in Python 2
raise IOError("file error") #This is also accepted in Python 2
raise IOError, "file error" #syntax error is raised in Python 3
raise IOError("file error") #this is the recommended syntax in Python 3

آرگومان ها در Exception ها

در پایتون 3، آرگومان های exception باید با کلیدواژه ‘as’ تعریف شوند.

except Myerror, err: # In Python2
except Myerror as err: #In Python 3

تابع next() و متد .next()

در پایتون 2، next() به عنوان متد شی سازنده، مجاز است. در پایتون 2، تابع next() به منظور مرور شی سازنده، نیز مجاز است. در پایتون 3 اما next() به عنوان متد سازنده دیگر صحیح نیست و در صورت استفاده از آن با خطا روبرو می شوید.

gen = (letter for letter in 'Hello World') # creates generator object
next(gen) #allowed in Python 2 and Python 3
gen.next() #allowed in Python 2. raises AttributeError in Python 3

ابزار 2to3

در کنار مفسر پایتون 3، اسکریپتی به نام 2to3.py در مسیر tools/scripts نصب می شود که کد های پایتون 2 را می خواند و سعی می کند تا به کد های مشابه آن در پایتون 3 تبدیل کند.

در زیر نمونه کدی نوشته شده در پایتون 2 را می بینید که با استفاده از این ابزار به کد قابل اجرا در پایتون 3 تبدیل شده است.

Here is a sample Python 2 code (area.py):
 def area(x,y = 3.14): 
    a = yxx
    print a
    return a
 a = area(10)
 print "area",a
 To convert into Python 3 version:
 $2to3 -w area.py
 Converted code :
 def area(x,y = 3.14): # formal parameters
    a = yxx
    print (a)
    return a
 a = area(10)
 print("area",a)
برای دنبال کردن نوشته های کاپ کد به کانال تلگرامی آن (cupcode_ir@) بپیوندید!

دیدگاه خود را بیان کنید

@