۰۰۱ پایتون و ماژول هفته – متن – قسمت اول string
مقدمه
این اولین قسمت از سری مقالات “آموزش کتابخانه های استاندارد پایتون” هست که من به اختصار بهش می گم “ماژول هفته”. این اسم از سری انگلیسی این مقالات که به نام Python Module of The Week منتشر میشه گرفته شده. سرفصل ها دقیقا مشابه هموناست. کاری که من می کنم صرفا تلاشی برای ترجمه این مقالات و اضافه کردن تجربه خودم بهشون هستش. پس اگه با سبک نوشتن یا توضیح دادن من حال نکردین، این شانسو دارین که یه نگاهی هم به اینجا بندازین، شاید اینطوری راحت تر باشین. (هدف من این هست که شما یاد بگیرید و بیاید بالا. حالا چه از اینجا چه اونجا :) ). در مورد حقوق کپی رایت ترجمه این مقالات هم می تونید به اینجا مراجعه کنید. البته چیزی که شما اینجا می خونید کمی با این مقالات متفاوت هستش. اگر دوست داشتید توی تکمیل این پروژه به من کمک کنید لطفا برام کامنت بزارید 🙂
مخاطبان دوره
این نوشته ها برای کسانی مفید هستش که دانش ابتدایی راجع به پایتون رو داشته باشن. آشنایی با syntax پایتون و شی گرایی لازمه. بقیه موارد هم اگر بلد باشید که کمکتون خواهد کرد. اگه مبتدی هستید منو دنبال نکنید چون احتمالا گمراهتون می کنم 🙂
حمایت از گربهعصبانی
اگه دوست داشتید کمی از عصبانیت من کم کنید، می تونید برام دونیت کنید.
ممنون از همه رفقایی که با حمایتهاشون به من انگیزه دادند تا بیشتر بنویسم.
عنوان فصل: متن
این فصل ماژول های مرتبط با رشته ها و فرمت بندی رشته ها رو بررسی می کنیم. این ماژول ها عبارتند از:
- string
- textwrap
- re
- difflib
ماژول string
اولین ماژولی که می خوام بررسی کنم، کسی نیست جز string. هرکسی برنامه نویسی کرده باشه اسم این لعنتیو حتما بارها و بارها شنیده. برای شناسایی هر کتابخونه اولین کاری که من می کنم اینه که وارد مفسر پایتون میشم و کتابخونه رو import می کنم. بعد یه help میگیرم ازش تا ببینم داستان چیه. این حرفایی که زدم توی این عکس پایینی خلاصه میشه:

خب تا همینجا سه تا بخش کلی رو مشاهده می کنیم. بخش NAME که داره میگه اسم کتابخونه چیه و یه توضیح کلی: “مجموعه ای از ثابت های رشته ای”. بخش MODULE REFERENCE داره میگه که رفرنس مربوط به این ماژول رو کجا می تونید پیدا کنید و لینک قرار داده که می تونید برای اینکه جیک و پوک یه ماژولو بفهمید به این لینک مراجعه کنید. و بخش DESCRIPTION که بخش های مختلف یک ماژول که شامل متغیرهای عمومی، کلاس ها، توابع، داده ها و فایل ها میشه. در ادامه می خوام یکم بیشتر راجع به DESCRIPTION توضیح بدم.
متغیرهای عمومی
منظور از متغیرهای محلی متغیرهایی هستش که با نوشتن نام ماژول و نام متغیر می تونیم بهشون دسترسی پیدا کنیم. مثلا whitespace نام یک متغیر عمومی برای ماژول string هستش. چون می تونیم مستقیما به صورت string.whitespace بهش دسترسی پیدا کنیم.

کلاس ها
توی بخش کلاس ها متوجه میشی که دو تا کلاس با نام های Formatter و Template وجود داره و هر کدوم دارای متدهایی هست که داخل تعریف کلاس معلومه. توی بخش توابع می بینیم که یک تابع به نام capwords داره و البته نکته مثبت دیگرش اینه که توضیحاتشم همونجا برامون نوشته و این عالیه.
Split the argument into words using split, capitalize each word using capitalize, and join the capitalized words using join. If the optional second argument sep is absent or None, runs of whitespace characters are replaced by a single space and leading and trailing whitespace are removed, otherwise sep is used to split and join the words.
پس تا اینجا یاد گرفتیم که چطوری دستور help توی پایتون می تونه به ما کمک کنه که یک ماژول رو خیلی بهتر بشناسیم. همین الان یه ایده به سرم زد!! یه برنامه بنویسیم که اسم هر ماژولی که بهش دادیم رو چک کنه و اطلاعاتی در مورد اون ماژول بهمون برگردونه. اطلاعاتی مثل تعداد کلاس ها، تعداد متغیر ها و توابع. و حتی اینکه هر تابع چه کاری انجام میده! یعنی یه جورایی یه help شخصی سازی شده. هر موقع فرصت کنم این برنامه رو می نویسم و به این متن لینکش می کنم.
توابع
خب حالا بریم سراغ اینکه چطوری می تونیم از امکانات مختلف ماژول string استفاده کنیم و حالشو ببریم. تابع capwords کارش اینه که تمام کلمات یک رشته رو به صورت capital درمیاره یا به عبارتی حرف اولشو بزرگ می کنه.

به اون توضیح انگلیسی که بالا قرار دادم دقت کنید. نوشته که این تابع capwords یه آرگومان دومی هم به عنوان ورودی میگیره! که کارش اینه که بگه هر کلمه چطوری از کلمات دیگه جدا شده. که البته همونطور که مشخصه این آرگومان اختیاریه و اگه چیزی بهش ندیم یک فاصله رو به عنوان مقدار پیش فرض در نظر میگیره.
کلاس Template
خب اولین کلاسی که باید بررسیش کنیم کلاسی هست به نام Template. این کلاس این امکانو فراهم می کنه که یک قالب برای رشته بسازیم که یه جاهاییش متغیر باشه و بسته به شرایط پر بشه. شاید بپرسید که خب خسته نباشی! اینو که با تابع format توی تایپ str هم می تونستیم انجام بدیم. حقیقت امر اینه که این کتابخونه string یه جورایی legacy محسوب میشه و خیلی از قابلیت هاش به تایپ str منتقل شده ولی خب به قول یکی از دوستام این زمستونو نبین، ما هم بهاری داشتیم. این کتابخونه string هم کسی بوده واسه خودش… . عکس زیر رو ببینید تا کاملا درکش کنید:

نکته ای که راجع به قالب ها وجود داره اینه که نمی تونید فرمت خاصی روشون اعمال کنید. مثلا تعداد ارقام بعد از اعشار چند تا باشه و فولان. در شرایط خاصی می تونه کاربردی باشه. ولی در کل امروزه از % و format استفاده کنید برای این موضوعات دستتون باز تره. ولی یه قابلیت دیگه ای داره که باعث میشه نسبت به % و format بهتر باشه. اونم اینه که با استفاده از متد safe_substitute می تونید بگید که اگه بعضی از مقادیر هم بهت پاس نشد ارور نده.
همین؟ نه هنوز خیلی مونده. تازه می خوایم یاد بگیریم که چطوری می تونیم کلاس فرمتر خودمونو بسازیم و هرجوری که دلمون می خواد تغییرش بدیم (این از برکاته پایتون محسوب میشه). الان توی کد پایین، من یه کلاس Template جدید ساختم به نام MCTemplate. بعد اومدم delimiter ش رو عوض کردم (اوج هنر من). نخواستم خیلی پیچیدش کنم ولی می بینید که پایتون چقدر باحاله و چقدر راحت میشه یک کلاس که توی ماژول های استاندارد پایتون هست و برداریم و به دلخواه خودمون یک کلاس جدید تولید کنید با امکانات متفاوت.

کلاس Formatter
خب بریم سراغ کلاس بعدی Formatter. متد format که روی تایپ str استفاده می کنید در واقع interface ای از این کلاس هستش. شاید با خودتون بپرسید پس این به چه دردی می خوره تا وقتی formatter هست؟ ببین Formatter امکان شخصی سازی رو بهت میده. در واقع format خودش یکی از مدلای شخصی سازی شده Formatter هستش. ولی تو شرایطی می تونیم format مربوط به خودمونو طراحی کنیم. اینجا زیاد بررسیش نمی کنیم چون فعلا کاری باهاش نداریم.
بازم متغیرهای عمومی
اینم از این! حالا می رسیم به مقادیر ثابتی که توی این ماژول وجود داره که در واقع همون متغیرهای عمومی هستند که قبلا هم بهشون اشاره کردم. اینجا یه نگاهی بهشون میندازیم:

چیه؟ نکنه فکر کردین دونه دونه پرینت می کنمشون! برنامه نویس پایتون باید باهوش باشه (برنامه نویسی که باهوش نباشه برنامه نویس نیست). اگه قرار بود هرکدومو تک به تک پرینت کنم که پایتون و انتخاب نمی کردم 🙂 راجع به اینکه چیکار کردم و کد چیکار می کنه توضیحی نمیدم و به خودتون واگذار می کنم.
سخن پایانی
دوستان عزیزم، این اولین قسمت از سری مقالات “آموزش کتابخانه های استاندارد پایتون” بود که تقدیم حضورتون شد. امیدوارم از خوندنش لذت برده باشید. لطفا اگر حس کردید این مطالب می تونه برای کسی مفید باشه حتما بهش معرفی کنید.
** لطفا و حتما من رو دنبال کنید. خوشحال میشم. **
تقدیم به جامعه پایتون ایران… امضا: گربهی عصبانی.