ترفندهای مفید زبان برنامه‌نویسی پایتون - قسمت دوم
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 9 دقیقه

ترفندهای مفید زبان برنامه‌نویسی پایتون - قسمت دوم

در قسمت قبل ، ما درباره برخی از توابع پرکاربرد، ماژول‌ها و کتابخانه های مفید صحبت کردیم. با ما همراه باشید در قسمت دوم از سری مقاله‌های، ترفندهای مفید زبان برنامه نویسی پایتون.

استفاده از دیتاتایپ list 

زبان برنامه‌نویسی پایتون این قابلیت را دارا است تا دستورهای کدنویسی در آن به شکلی کاملاً واضح و تمیز نوشته شوند، به طوری که بسیار نزدیک به زبان گفتار خوانده می‌شود، که برای مثال در کد زیر از دیتا تایپ (نوع داده) لیست استفاده کرده‌ایم.

همان‌طور که مشاهده می‌کنید، ابتدا یک متغیر از نوع لیست تحت عنوان  numbers ساخته و مقادیر مد نظر را در آن ذخیره کرده‌ایم:

در ادامه، متغیری تحت عنوان evens تعریف کرده‌ایم که تمامی مقادیر داخل لیست، به شرط آنکه باقیماندۀ تقسیم هر یک از این مقادیر بر عدد دو برابر با صفر باشد، در این متغیر ذخیره می‌شود. 

به عبارت بهتر، این متغیر تمامی مقادیر زوج از لیست numbers را نگاه‌داری می‌کند و در خط سوم نیز گفته‌ایم که تمامی مقادیر موجود در لیست منهای مقادیر ذخیره‌شده در متغیر  evens را ذخیره کند به طوری که این متغیر  تمامی مقادیر فرد موجود در لیست را نگاه‌داری می‌کند.

در ادامه، متغیری از نوع لیست تحت عنوان cities تعریف کرده و سه مقدار رشته‌ایی را در آن ذخیره کرده‌ایم و در ادامه تابعی تحت عنوان visit تعریف کرده‌ایم و پارامتری تحت عنوان city را به عنوان آرگومان ورودی به این تابع پاس داده‌ایم.

 در داخل این تابع گفته‌ایم که آرگومان ورودی به این تابع، city، با رشته‌ی «Welcome to» به اصطلاح کانکت شده و توسط تابع print چاپ شود.

حال در ادامه باید تابع تعریف‌شده را فراخوانی کنیم و برای اینکه این تابع، به ازای تمامی مقادیر  موجود در لیست cities اجرا شود، باید از حلقه‌ي For استفاده کنیم.

در نهایت این حلقه ۳ بار اجرا شده و خروجی زیر را نمایش می‌دهد:

تابع Map

زبان پایتون قابلیت برنامه‌نویسی فانکشنال را برای برنامه‌نویس‌ها فراهم می‌کند که در همین راستا تابع  mapیکی از بهترین تابع‌های به اصطلاح Built-in در این زبان است.

 که در ترکیب با تابع‌های  lambda عملکرد بهتری ارائه می‌دهد (در توضیح تابع  lambda باید گفت که، در زبان برنامه‌نویسی پایتون امکان نوشتن یکسری تابع‌های به اصطلاح Anonymous یا «بی‌نام» را برای برنامه‌نویس‌ها فراهم می‌کند به طوری که ابتدا  lambda و به دنبال آن نام یکسری آرگومان ورودی مد نظر و در ادامه علامت : و پس از آن نیز تنها دستور مجاز برای اعمال روی آرگومان‌های ورودی مذکور نوشته می‌شود.)

در مورد نحوه عملکرد تابع  map نیز باید گفت که این تابع ابتدا یک آرایه جدید می‌سازد تا مقادیر حاصل از فراخوانی تابع مد نظر برنامه‌نویس به ازای هر یک از اِلمان‌های آرگومان ورودی را در آن ذخیره کند و به خاطر داشته باشیم که این متد مقادیر آرایه اصلی را تغییر نمی‌دهد:

در مثال بالا، تابع map ،تابع lambda برای هر مقدار متغییر x ،اعمال می‌کند.

کتابخانه newspaper3k 

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

همچنین این کتابخانه برخی از قابلیت‌های NLP (پردازش زبان طبیعی) را به منظور بررسی مقالات مد نظر دارا است. 

برای دانلود و نصب این کتابخانه ابتدا دستور زیر را در کامندلاین یا ترمینال اجرا می‌کنیم:

برای اطلاعات بیشتر از این کتابخانه می‌توانید به این لینک مراجعه کنید.

operator overloading

زبان برنامه‌نویسی پایتون یکسری عملگرهایی دارا است که به صورت کلاس‌های به اصطلاح (Built-in) در این زبان تعریف شده‌اند.

حال اگر بخواهیم رفتار هر یک از این عملگرها را تغییر دهیم، باید متدهایی که در هنگام ساخت آبجکت جدید از این کلاس‌ها فراخوانی می‌شوند را متناسب با نیاز خود تغییر دهیم و برای این منظور کلاسی دلخواه تعریف کرده و متدهای مد نظر خود را در آن اصطلاحاً Overload می‌کنیم.

به طور مثال، در کد زیر قصد داریم تا رفتار متدهای lt و gt را تغییر دهیم و همان‌طور که ملاحظه می‌کنید، در ابتدا کلاسی تحت عنوان  Thingتعریف کرده‌ایم که در حین ایجاد هر گونه آبجکتی از کلاس متد init  از کلاس مذکور به منظور مقداردهی اولیه به آن فراخوانی می‌شود که اولین آرگومان این متد  selfاست، که اشاره به خود کلاس دارد و بیانگر این است که آبجکت ساخته‌شده متعلق به این کلاس خاص است و آرگومان دوم نیز بیانگر پارامتری است که قرار است تا به عنوان آرگومان ورودی برای هر آبجکت ساخته‌شده از این کلاس در نظر گرفته شود:

بنابراین متدی تحت عنوان  initبرای این کلاس تعریف کرده و دو آرگومان self و value را به آن می‌دهیم، که self اشاره بر تعلق این متد به کلاس Thing داشته و value نیز بیانگر آرگومانی است که در هنگام ساخت آبجکت جدید از این کلاس باید مقداردهی شود.

ماژول  Pprint

این ماژول امکانی را برای برنامه‌نویس‌های پایتون فراهم می‌آورد تا بتوانند برخی دیتا استراکچرهای پیچیده و یا تودرتو در قالب جیسون (JSON) را به شکلی زیبا و خوانا در خروجی چاپ کنند. 

اگرچه تابع print نیز همین کار را انجام می‌دهد اما این در حالی است که تابع  print در مورد چاپ داده‌های پیچیده از قابلیت خوانایی پایینی برخوردار است، که در همین راستا مثال زیر را برای ماژول pprint مورد بررسی قرار می‌دهیم:

همان‌طور که در کد بالا می‌بینید، ابتدا ماژول requests را در برنامه ایمپورت می‌کنیم، که به منظور دریافت دیتای مربوط به یک url خاص در قالب جیسون به کار گرفته می‌شود و در ادامه ماژول pprint را ایمپورت کرده و متغیری تحت عنوان url را به منظور نگاه‌داری آدرس وب‌ مد نظر تعریف می‌کنیم. 

در ادامه آبجکتی تحت عنوان users از کلاس get مربوط به ماژول requests ساخته‌ایم تا دیتای مد نظر را از آدرس url مذکور و در قالب جیسون (json) به اصطلاح فچ (fetch) کرده و در آن نگهداری کند.

که در ادامه این متغیر را به عنوان آرگومان ورودی به تابع pprint از ماژول pprint داده‌ایم تا دیتای مد نظر را به شکلی ساختاریافته در خروجی چاپ کند.

صف (Queue)

زبان پایتون قابلیت برنامه‌نویسی به صورت اصطلاحاً Multithreading را دارا است.

 که در آن برخی از دستورالعمل‌های برنامه امکان اجرا به صورت Concurrent (موازی) را دارند که این قابلیت با به‌کارگیری از ماژول استاندارد Queue در این زبان تسهیل می‌شود.

این ماژول امکان ساخت دیتا استراکچرهایی از نوع صف را برای برنامه‌نویس‌ها فراهم می‌کند. 

به طوری که قابلیت هندل کردن برخی از تسک‌ها بر اساس یکسری قوانین خاص برای ایشان فراهم می‌شود که یکی از این قوانین، First In First Out یا به اختصار FIFO است. 

که در آن هر یک از تسک‌ها (وظایف) به همان ترتیبی که وارد صف شده‌اند اجرا می‌شوند و قانون بعدی  Last In First Out یا به اختصار LIFO است که بر اساس این قانون نیز اولین تسک اضافه‌شده به صف در ابتدا اجرا می‌شود .

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

برای مطالعه بیشتر درباره‌ي این قوانین می‌توانید به این لینک مراجعه کنید.

تابع __repr__

این مورد هم یکی از تابع‌های Built-in در زبان پایتون است که برنامه‌نویس‌ها می‌توانند تابع مذکور را برای نمایش یک توصیف رسمی از ویژگی‌های آبجکت مد نظر خود استفاده کنند. 

برای مثال در کد زیر داریم:

در کد بالا، آبجکتی تحت عنوان file  از تابع open ساخته و دو آرگومان را به عنوان ورودی به این تابع پاس داده‌ایم ،که هر یک از این آرگومان‌ها به ترتیب مربوط به نام فایلی است که به عنوان ورودی به تابع مذکور داده‌ایم .

 آرگومان دوم هم بیانگر سطح دسترسی ما به فایل مد نظر است که در اینجا منظور از "r" اشاره به کلمۀ Read دارد و بیانگر این موضوع است که سطح دسترسی ما به این فایل صرفاً «خواندن» فایل بوده و نمی‌توانیم چیزی را از آن حذف و یا به آن اضافه کنیم.

همچنین می‌توانیم به جای  "r"از "w" و "a" نیز استفاده کنیم. که به نشانگر کلمات write و append هستند .

در ادامه از برنامه خواسته‌ایم تا اطلاعات فایل مد نظر را که در متغیر  file ذخیره‌ شده است را در خروجی چاپ کند.

که یک روال معمول برای نمایش اطلاعات فایل مد نظر است و در شرایطی که بخواهیم توصیفی به اصطلاح حرفه‌ایی (مخصوص خود برنامه‌نویس) ،از این فایل در معرض دیدمان قرار گیرد، از تابع __repr__ استفاده می‌کنیم که برای این منظور داریم:

همان‌طور که در کد فوق می‌بینید، تابع __repr__ متناسب با نیاز برنامه‌نویس‌ها تنظیم شده است که در همین راستا این متد را در کلاسی تحت عنوان دلخواه   someClass  تعریف کرده و آرگومان self به این متد داده‌ شده است، که اشاره به تعلق این متد به کلاس someClass دارد.

 و someInstance نشانگر این است که ما از کلاس someClass یک آبجکت (شیء) ساخته‌ایم.

در خط آخر هم می‌توانیم بوسیله‌ی تابع print مقدار someInstance را چاپ کنیم.

در قسمت آخر از این سری مقالات، ما درباره‌ی کتابخانه sh، ماژول uuid، محیط مجازی و ... صحبت می‌کنیم.

پس در قسمت پایانی از این سری مقالات نیز همراه ما باشید.

منبع

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

/@alireza.mzh
علیرضا معمارزاده
junior level developer

Student of Software Engineering, python Developer, i love programming and game

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید