در زبان برنامهنویسی پایتون ماژولها بخشهای کوچکی از یک برنامه بزرگتر هستند. در آموزشهای گذشته با ایجاد انواع ماژول آشنا شدهایم. در این بخش به توضیح در مورد نحوه استفاده از ماژول پیشرفته که توسط اشخاص دیگر ایجاد میشوند، میپردازیم.
ماژول پیشرفته collections
برای استفاده از کلاس Counter از ماژول پیشرفته collections، ابتدا دستور from collections import Counter را مینویسیم. این کلاس یک دنباله را به عنوان ورودی میگیرد. در نهایت یک dictionary که کلیدهای آن اعضای دنباله و مقادیر آن تعداد هر کدام از اعضا میباشد را برمیگرداند.
این دنباله میتواند string نیز باشد. در نهایت با استفاده از ماژول پیشرفته collections یک dictionary که کلیدهای آن اعضای string و مقادیر آن تعداد هر کدام از اعضا میباشد را برگردانده میشود.
اگر یک string را split کنیم، یک لیستی از اعضای string خواهیم داشت که در string با فاصله از یکدیگر جدا شدهاند. ابتدا مقدار split شده را برابر با متغیر word قرار میدهیم. سپس میتوانیم با Counter از ماژول پیشرفته collections تعداد هر یک از این اعضا را که در string استفاده شده است، به دست آوریم.
اگر کلاس Counter از ماژول پیشرفته collections را برابر با یک متغیر قرار دهیم. سپس نام متغیر را نوشته و بعد نقطه و یک Tab بزنیم. در این صورت تمام attributeها و متدهای Counter نمایش داده میشود. اگر متد most_common را انتخاب کنیم، یک لیستی از تاپلها داده میشود. که درون هر تاپل اعضای دنباله مد نظر و تکرار آن عضو به ترتیب از بیشتر به کمتر نمایش داده میشود.
اگر در داخل پرانتز متد most_common یک عدد قرار دهیم. به عنوان مثال عدد ۳ را در نظر بگیریم، به این معنی میباشد که ۳ تا عضوی که بیشترین تکرار را داشتهاند را به ترتیب، بدهد.
متد keys از ماژول پیشرفته collections اعضای یک دنباله را به صورت یک لیست نشان میدهد.
متد values از ماژول پیشرفته collections تعداد اعضای یک دنباله را به صورت یک لیست نشان میدهد. اگر تابع sum را برای متد values بکار ببریم تعداد کل اعضای موجود در یک دنباله را به نمایش میدهد.
کار با دیکشنری در ماژول پیشرفته collections
در یک dictionary اگر مقدار یک کلیدی که موجود نباشد را بخواهیم به دست بیاوریم با خطا مواجه میشویم.
defaultdict در ماژول پیشرفته collections
برای ثبت کلید بدون مقدار میتوان defaultdict را از ماژول پیشرفته import ،collections کرد. سپس یک متغیر به نام d را برابر با defaultdict قرار میدهیم و عبارت object را به عنوان آرگومان آن قرار میدهیم. در این حالت میتوان یک کلید بدون مقدار را ثبت کنیم.
اگر برای آرگومان defaultdict از ماژول پیشرفته collections، عبارت lambda:0 را در نظر بگیریم، به این معنی میباشد که هر کلیدی که برای dictionary در نظر گرفتیم و بدون مقدار بود، یک عدد به صورت پیش فرض که در اینجا صفر است را به عنوان مقدار آن به کلید نسبت میدهیم.
در پایتون به صورت پیشفرض برای dictionary ترتیب و الویت قرار گیری المانها، تعریف نشده است. اگر یک dictionary خالی تعریف کنیم و یک سری کلید و مقدار برای آن تعریف کنیم، گاهی اوقات خواهیم دید که ترتیب قرار گیری این کلیدها و مقادیر در dictionary و زمانی که نمایش داده میشوند برابر نیست.
در این صورت میتوان از ماژول پیشرفته OrderedDict ،collections را import میکنیم. سپس یک متغیر به نام d را برابر با OrderedDict قرار میدهیم. تعدادی کلید و مقدار به این dictionary نسبت دهیم، خواهیم دید که ترتیب قرار گیری این کلیدها و مقادیر در dictionary و زمانی که نمایش داده میشوند برابر خواهد بود.
اگر یک دیکشنری خالی ایجاد کنیم و یک سری کلید و مقدار به آن نسبت دهیم، سپس یک دیکشنری خالی دیگر ایجاد کنیم و همان کلیدها و مقادیر دیکشنری اول را به دیکشنری دوم نسبت دهیم و ترتیب قرار گرفتن آنها یکسان نباشد، اگر بسنجیم که دو دیکشنری با هم برابر هستند یا خیر، خواهیم دید که برابر خواهند بود. زیرا در دیکشنری پیش فرض پایتون ترتیب الویت ندارد.
OrderedDict در ماژول پیشرفته collections
اگر دو دیکشنری را با OrderedDict از ماژول پیشرفته collections بسازیم، سپس بسنجیم که دو دیکشنری با هم برابر هستند یا خیر، خواهیم دید که برابر نخواهند بود. زیرا در دیکشنری OrderedDict ترتیب، الویت دارد.
namedtuple در ماژول پیشرفته collections
اگر از ماژول پیشرفته namedtuple ،collections را import کنیم، می توانیم یک آبجکت به وسیله namedtuple بسازیم. در این صورت برای آرگومان اول، اسم آن آبجکت را درون یک کوتیشن قرار میدهیم. و برای آرگومان دوم attributeهای آبجکت را که همگی درون یک کوتیشن قرار میگیرند، در نظر میگیریم. در این صورت attributeهای آبجکت ساخته شده را میتوان با نوشتن نام نمونهایی که از آبجکت ساختهایم. و سپس نقطه و در نهایت attributeمورد نظر، فراخوانی کنیم. همچنین با نوشتن اندیس attribute مورد نظر در مقابل نام نمونهایی که از آبجکت ساختهایم، میتوانیم attribute مورد نظر را فراخوانی کنیم.
برای آشنایی بیشتر با مبحث ماژول پیشرفته و نحوه کار با آنها میتوانید به دوره جامع آموزش زبان برنامهنویسی پایتون آکادمی رسا مراجعه کنید.