سی اس اس برای شما

این مقاله یکی از قسمت‌های سلسله مقالاتی برای آشنایی و آموزش زبان پایتون است. این مجموع پیش از این در سی اس اس منتشر شده اما به سایت جدید منتقل نشده بود. با توجه به اهمیت موضوع و درخواست‌های مکرر خوانندگان، این مجموعه را به سایت مجله اضافه می‌کنیم و امیدواریم که مورد توجه علاقمندان قرار بگیرد.

 

برای مطالعه قسمت‌های قبلی سلسله مقالات آموزش زبان برنامه‌نویسی پایتون اینجا کلیک کنید

نسل سوم

همان‌گونه که پیش‌تر اشاره شد، در حال‌حاضر توسعه پایتون در دو مسیر موازی در حال انجام است. گروه نخست توسعه‌دهندگان همچنان به کار روی سری دوم پایتون (۲٫x) مشغول هستند که به‌دلیل قدمت و سابقه بیشتر، پرطرفدارتر است. در حال حاضر بيشتر فریم‌ورک‌ها و کتابخانه‌های رایج و پراستفاده برای این سری توسعه داده شده و پیاده‌سازی می‌شوند. تمام مثال‌ها و برنامه‌هایی که تا‌کنون معرفی کرده‌ایم نیز از همین سری استفاده می‌کنند.
 این نسل از زبان پایتون در اکتبر سال ۲۰۰۰ معرفی شد و اکنون به نسخه ۱/۷/۲رسیده است. گروه دوم توسعه‌دهندگان به کار روی نسل جدید این زبان، یعنی پایتون ۳٫x می‌پردازند که تا‌کنون نسخه ۲/۳ آن نیز منتشر شده است. در این سری وان روسوم (Guido van Rossum) خالق پایتون، تصمیم گرفته به بازنگری اساسی در تمام جنبه‌های این زبان برنامه نویسی و حذف Backward Compatibility (پشتیبانی از اجرای کدهای نوشته شده با نسل دوم این زبان) بپردازد.
 هدف اين است كه سری جديد پايتون، با بنيادی متفاوت و با شروعی دوباره، علاوه بر ساده‌سازی دستور زبان افزايش خوانايی، امكانات و ويژگی‌های جديدی را نيز به ارمغان آورد.
در این نسخه سینتکس بسیاری از دستورها برای کارایی بهتر، یادگیری ساده‌تر و یکنواخت شدن با سایر اجزای پایتون تغییر كرده و پاره‌ای از دستورات با همان سینتکس قدیمی، کارایی تازه‌ای پیدا کرده‌اند. ما در این قسمت تنها به معرفی برخی تغییرات اساسی خواهیم پرداخت که به صورت خاص به دستوراتی مربوط می‌شوند که در قسمت‌های قبلی از آن‌ها استفاده کرده‌ایم.
 برای آشنایی عمیق‌تر با جنبه‌های نو و تغییرات نسل سوم زبان پایتون می‌توانید از منابع فراوانی که در اینترنت موجود است، استفاده کنید. در انتهای این قسمت آدرس تعدادی از این مراجع را ذکر خواهیم کرد.

دستور PRINT

یکی از مهم‌ترین و پرکاربردترین بخش‌های پایتون که در این نسخه دستخوش تغییرات اساسی شده، دستور print است. در نسخه‌های ۲٫x این زبان به راحتی می‌توانستیم آیتم مورد نظر را به فرم زیر چاپ کنیم:

print “This is a test”

اما در سری جدید پایتون، چنین دستوری با پیغام خطا مواجه خواهد شد. در واقع نسخه جدید دستور print را همانند یک تابع پیاده‌سازی کرده است و همانند هر تابع دیگری برای ارسال آرگومان‌ها به تابع باید از پرانتز استفاده کنیم. یک دستور ساده print در نسخه سوم به فرم زیر است:

print (“This is a test”)

هرچند این تغییر به ظاهر ساده است، اما در ادامه خواهیم دید که تغییرات دستور print به همین موارد خلاصه نخواهد شد.

قالب‌بندی و جای‌گذاری متغیرها

در نسخه قبلی پایتون ما از کدهایی برای قالب‌بندی و جای‌گذاری متغیرها در یک رشته استفاده می‌کردیم (همانند شكل۱). اگرچه این عبارت در پایتون ۲/۳ نیز به درستی کار خواهد کرد، اما این وضعیت در حال تغییر است، زيرا توابع قالب‌بندی %s و %d در نسخه‌های آینده حذف خواهند شد و سیستم نگارشی {x} جایگزین آن خواهد (شکل‌۲). در این روش عبارت‌های معرفی شده به عنوان آرگومان‌های متد format، به ترتیب جایگزین {x}ها خواهند شد. همان‌طور که مشاهده می‌کنید، خوانایی این روش جدید بسیار بیشتر از حالت قبلی ارجاع به متغیرها و قالب‌بندی آن‌ها است.


فهرست ۱- قالب‌بندی و جایگذاری متغيرها در پايتون X.2


فهرست ۲- قالب‌بندی و جایگذاری متغيرها در پايتون X.3​

اعداد

در سری ۲٫x پایتون عبارت ۰٫۲/۵ حاصلی برابر با۵٫۲ داشت. اما اگر از عبارتی مانند ۲/۵ استفاده می‌کردید، به‌واسطه تبدیل نتیجه به فرمت عدد صحیح (به‌واسطه عدد صحیح بودن هر دو عملوند عبارت ۲/۵) حاصلی برابر ۲ دریافت می‌کردید. در سری ۳٫x پایتون استفاده از هر دو فرم قبلی نتیجه‌ای برابر با ۵٫۲ ایجاد خواهد کرد. و در صورتی که نیاز داشته باشید تقسیم را به‌صورت صحیح و بدون اجزای اعشاری انجام دهید، باید از فرمت ۵//۲ استفاده کنید.

دستور INPUT 

در سری ۲٫x  پایتون، دستور input  تنها ورودی‌های عددی را می‌پذیرفت و در صورت ورود رشته‌ها همانند شکل ۳ با پیغام خطا روبه‌رو می‌شدیم. برای دریافت رشته‌ها از کاربر مجبور بودیم از دستور raw_input استفاده کنیم. اما در سری ۳٫x دستور input با تمام ورودی‌ها همانند رشته رفتار می‌کند و در صورتی که به دریافت اعداد نیاز داشته باشید، باید ورودی‌های دستور input را به صورت دستی به عدد تبدیل کنید.

فهرست ۳- در پايتون X.2 دستور input تنها ورودی عددی را می‌پذيرد.

نامساوی و شرطی‌ها

در سری ۲٫x پایتون برای کنترل نامساوی‌بودن عبارت‌ها از عملگر <> استفاده می‌شد، اما این شیوه در سری ۳٫x دیگر مجاز نیست و به جای آن باید از عملگر != استفاده کرد.  نکته دیگر این‌که در سری ۲٫x در صورت مقایسه دو عملوند از نوع مختلف (مثلاً مقایسه یک رشته با یک عدد صحیح) همانند شکل ۴ نتیجه‌ای برابر با false یا نادرست بازگردانده می‌شد. به عبارت دیگر، خطایی رخ نمی‌داد. اما در سری ۳٫x باید حتماً، از یکسان بودن (به عبارت کلی‌تر، قابل مقایسه بودن) عملگرها اطمینان حاصل کرد. در غیر این صورت، همانند شکل ۵ با خطای Type Error مواجه خواهیم شد.

فهرست ۴- در سری X.2 می‌توان انواع داده نامربوط را با هم مقايسه كرد.


فهرست ۵- در پايتون X.3 تنها انواع داده مشابه قابل مقايسه هستند.​

سایر تغییرات

انواع داده بنیادین در پایتون نیز دستخوش تغییر شده‌اند. دو نوع داده int و long در قالب یک نوع داده، یعنی int ادغام شده‌اند و متدهای مربوط به دیکشنری‌ها نظیر ()dict.keys به جای بازگرداندن یک لیست، نوع جدیدی به نام view را باز می‌گردانند. تابعی نظیر ()range هم به جای یک لیست یک شمارنده یا Iterator را باز می‌گرداند. 
همچنین تغییرات فراوانی نیز در کتابخانه‌های استاندارد پایتون ایجاد شده است. به عنوان مثال، می‌توان به حذف توابع مربوط به گوفر (gopherlib) و جایگزین شدن md5 با hashlib اشاره کرد. البته، همان‌طور که در ابتدا نیز اشاره شد، تغییرات ایجاد شده بسیار زیاد بوده و توضیح  كامل همه آن‌ها در این مقاله نمی‌گنجد.

فهرست ۶

تبدیل برنامه‌ها به سری جدید

سری ۳٫x  پایتون با ابزاری برای تبدیل کدهای سری‌های قبلی به سری جدید همراه شده است. اگرچه این ابزار در همه موارد به درستی عمل نمی‌کند، اما در بسیاری از موارد شما را به هدف بسیار نزدیک خواهد کرد. این ابزار نام معنی‌دار ۲to3 را یدک می‌کشد. در لینوکس برای استفاده از این ابزار از طریق ترمینال دستور زیر را وارد می‌کنیم:

۲to3 [-w] <input_file.py<

توجه داشته باشيد كه اين دستور به شرطی عمل خواهد كرد كه سری ۳٫x  پايتون روی لينوكس نصب شده باشد. در اوبونتو برای نصب اين سری جديد  از دستور زير استفاده كنيد:

sudo apt-get install python3

این ابزار در ماشین‌های ویندوزی با نام ۲to3.py در پوشه c:Python3xToolsScripts قرار دارد و برای استفاده از آن باید از خط فرمان و در پوشه گفته شده دستور زیر را صادر کرد:

<python.exe   ۲to3.py  [-w]  <input_file.py

این برنامه در حالت عادی تنها تغییرات لازم را برای تبدیل کد، روی صفحه نمایش چاپ خواهد کرد و فایل را تغییر نخواهد داد. استفاده از سوییچ اختیاری –w باعث می‌شود، تغییرات مورد نیاز به فایل اصلی اعمال شود. در صورت استفاده از این سوییچ یک نسخه پشتیبان از فایل تهیه شده و تغییرات موردنیاز به طور مستقيم به فایل اعمال مي‌شود. 

آیا باید به سری ۳٫x مهاجرت کنیم؟

تغییرات سینتکس در همه نسخه‌های جدید زبان‌های برنامه‌نویسی به چشم می‌خورد. میان‌برهایی نظیر += ممکن است به سادگی کار ما را در هنگام کدنویسی ساده‌تر کنند. اما همین تغییرات ساده سینتکس جنبه‌های منفی نیز در خود دارند. درباره زبان پایتون نیز به دلیل همین تغییرات (گاهي ساده) در سینتکس، بسیاری از ماجول‌ها و کدهایی که قبلاً استفاده می‌كرديم، در برنامه‌هايی که با سری ۳٫x پایتون نوشته می‌شوند، قابل استفاده نیستند. به عنوان نمونه می‌توان به کتابخانه‌های ElementTree اشاره کرد که در بخش مربوط به xml از آن استفاده کردیم. اما با تمام این مشکلات نباید از مهاجرت به سری ۳٫x پایتون نا امید شد.
خوشبختانه پایتون سری ۲٫x (حداقل از نسخه ۶/۲ به بعد) در عین سازگاری با نسخه‌های قبلی، از تمام سینتکس‌های مورد نیاز برای نوشتن کد به سبک سری ۳٫x پشتیبانی می‌کند (فهرست ۶). پیشنهاد می‌کنیم که از همین حالا نوشتن کد به سبک سری   ۳٫x را آغاز كرده و اگر می‌توانید تنها به کتابخانه استاندارد پایتون بسنده کنید و به ماجول‌های دیگر رجوع نكنيد، حتماً به  ۳٫x  پایتون مهاجرت کنید. 
به کمک ابزار انتقالی که پیش‌تر از آن صحبت کردیم، تقریباً می‌توانید به سادگی تمام مجموعه کدهایی را که تا‌کنون نوشته‌اید، به سری ۳٫x ارتقا دهید. اما حتی اگر نیازمند کتابخانه‌هایی هستید که هنوز به سری ۳٫x منتقل نشده‌اند، همواره گوشه چشمی به این سری جدید داشته باشید. زيرا دیر یا زود کدهای موردنظر شما نیز به سری ۳٫x ترجمه خواهند شد. 

مطالعه بیشتر

برای آشنایی بیشتر با تغییرات و نحوه مهاجرت به این سری جدید می‌توانید به منابع زیر مراجعه کنید:

– http://wiki.python.org/moin/Python2orPython3
– http://docs.python.org/release/3.1.2/whatsnew/3.0.html
– http://docs.python.org/library/2to3.html 
– http://diveintopython3.org