معرفی فصل
در این فصل میآموزیم که چگونه expression های مناسبی برای ساخت لیستهای مختلفی بنویسیم؛ با بکارگیری comprehensions های پایتون برای کار با list ، dictionary و set ها به صورت بهینه از منابع حافظه استفاده کنیم. از collections.defaultdict برای مقابله با رخداد exception ها در زمان کار با دیکشنریها استفاده میکنیم. از iterator برای دسترسی به شکل Pythonic به دادهها استفاده میکنیم. توابع generator را بررسی میکنیم و با آنها محاسبات پیچیده انجام میدهیم. با itertools به اختصار روندهای پیچیده را بازنویسی میکنیم و در نهایت با re module کار میکنیم تا regular expressions (RegEx) را در پایتون پیاده کنیم.
معرفی فصل
پایتون فقط یک زبان برنامهنویسی نیست! پایتون از یک کامیونیتی ( community ) از برنامهنویسان نیز تشکیل شدهاست که از پایتون استفاده میکنند، کد آن را نگهداری و maintain میکنند و از برنامهنویسی به زبان پایتون لذت میبرند. مثل هر community دیگری، اعضای community پایتون، اشتراک فرهنگی و ارزشهای مشترک دارند؛ این ارزشها در داکیومنت The Zen of Python (PEP 20) (نوشته شده توسط Tim Peter ) خلاصه شده اند. به جملهی زیر از PEP 20 توجه کنید:
There should be one -- and preferably only one -- obvious way to do it.
یعنی باید یک راه - و بهتر است که فقط یک راه - واضح برای انجام کاری وجود داشته باشد.
مطالعهی بیشتر:
در community پایتون تاریخچهی طولانیای از رقابت با community زبان برنامهنویسی Perl وجود دارد. ایدهی اولیهی پشت زبان Perl این بود که:
There Is More Than One Way To Do It ( TIMTOWTDI )
یعنی بیشتر از یک راه برای انجام کاری وجود دارد.
اگر چه جملهی Tim Peter در PEP 20 به نوعی تیکه انداختن به TIMTOWTDI است، یک نکتهی دیگر در خود دارد: راه پایتونی یا pythonic !
یک کد زمانی pythonic محسوب میشود که واضح و مشخص کاری که برنامهنویس پایتون انتظار دارد را انجام دهد. گاهی نوشتن کد pythonic ساده است ولی زمانی که کار پیچیدهای داشته باشیم، راه pythonic کمی (یا حتی خیلی) به تلاش بیشتر نیاز دارد. هدف از نوشتن کد pythonic در موارد پیچیده این است که زمانی که یک class یا ساختار داده ( data structure ) یا ماژول مینویسیم که بعدا توسط خود ما یا دیگران استفاده شود، بهتر است کمی تلاش کنیم تا مصرف کنندهی کد نوشته شده بتواند به سادهترین شکل ممکن از آن استفاده کند. وقتی کد ما استفاده کنندههای بیشتری نسبت به نویسندگانش داشته باشد، سختی کشیدن برای pythonic نوشتن آن یک trade-off درست است.
در فصل قبلی با standard libraries آشنا شدیم و حالا نوبت به بخشی از این کتابخانهها رسیده که به صورت اختصاصی بر اساس ویژگیهای تخصصی پایتون و برای نوشتن کد Pythonic هستند. در فصل قبلی collections را دیدید یاد گرفتید چگونه با آنها کار کنید، در این فصل بیشتر بر روی collection comprehension تمرکز داریم که روی list و set و dictionary ها عمل میکند. Iterator ها و generator ها به ما اجازه میدهند که به collectionهای خود رفتار list مانندی را به شکل Pythonic بدهیم. همچنین با بخشهای دیگری از standard library آشنا میشوید که به ما اجازه میدهد collectionهای پیچیدهای را به سادگی بنویسیم.
این قابلیتها کد پایتون را برای خواندن، نوشتن و فهمیدن آسانتر میکنند و بین برنامهنویسان واقعی پایتون بسیار پرطرفدار هستند. درک کدهای Pythonic و نوشتن آنها چیزی است که شما را از بیشتر برنامهنویسان مبتدی پایتون متمایز میکند.
مطالعهی بیشتر:
بعد از پایان این فصل حتما کتابخانهی خارجی more-itertools را بررسی کنید. اگر itertools یک الماس باشد، more-itertools شامل بُرِشهای دیگری از این الماس است که به ما اجازه میدهد که بلوکها، دستورات و روتینهای مختلفی برای کار با iterableهای پایتون بسازیم.