ابزارها و تکنیک های پیشرفته پایتون: انواع داده: مولکول های اطلاعات - پرسش و پاسخ
انواع داده: مولکول های اطلاعات
پرسش:
در پایتون، تفاوت اصلی بین list و tuple چیست و چه زمانی از هر کدام باید استفاده کرد؟
پاسخ:
تفاوت اصلی بین list و tuple در قابلیت تغییر پذیری (mutability) آنهاست. list ها قابل تغییر هستند، به این معنی که می توان عناصر آنها را اضافه، حذف یا تغییر داد. tuple ها غیر قابل تغییر (immutable) هستند، یعنی پس از ایجاد، نمی توان آنها را تغییر داد. از list ها زمانی استفاده می شود که نیاز به تغییر مجموعه داده ها باشد، مانند اضافه کردن آیتم به یک سبد خرید. از tuple ها زمانی استفاده می شود که داده ها نباید تغییر کنند، مانند مختصات جغرافیایی یا کلید های دیکشنری که باید hashable باشند.
پرسش:
مفهوم 'generator' در پایتون چیست و چه مزایایی نسبت به ساخت لیست های معمولی دارد؟
پاسخ:
Generator ها در پایتون نوعی iterator هستند که مقادیر را به صورت 'در لحظه' (on the fly) تولید می کنند و نیازی به ذخیره کل مجموعه در حافظه ندارند. این امر آنها را برای کار با مجموعه های داده بسیار بزرگ یا جریان های داده بی نهایت بسیار کارآمد می کند. مزیت اصلی آنها صرفه جویی در حافظه است، زیرا فقط یک مقدار در هر زمان تولید و مصرف می شود. برای ساخت generator ها می توان از تابع هایی که از کلمه کلیدی 'yield' استفاده می کنند یا از generator expressions (مشابه list comprehensions اما با پرانتز به جای کروشه) بهره برد.
پرسش:
چگونه می توان از decorator ها در پایتون برای افزودن قابلیت به توابع یا کلاس ها بدون تغییر کد اصلی آنها استفاده کرد؟
پاسخ:
Decorator ها در پایتون سینتکسی هستند که به شما اجازه می دهند رفتار یک تابع یا متد را با پیچاندن آن در یک تابع دیگر تغییر دهید. آنها با استفاده از علامت '@' قبل از تعریف تابع یا کلاس اعمال می شوند. decorator ها برای کارهایی مانند logging، کنترل دسترسی، caching، و اعتبارسنجی مفید هستند. یک decorator در واقع تابعی است که یک تابع دیگر را به عنوان ورودی می گیرد، آن را اجرا می کند و یک تابع جدید را برمی گرداند که قابلیت های اضافی را به تابع اصلی اضافه می کند.
پرسش:
چگونه می توان از 'metaclass' ها در پایتون برای کنترل نحوه ایجاد کلاس ها استفاده کرد؟
پاسخ:
Metaclass ها در پایتون 'کلاس های کلاس ها' هستند. به طور پیش فرض، کلاس ها از type به عنوان metaclass استفاده می کنند. Metaclass ها به شما این امکان را می دهند که فرآیند ایجاد کلاس ها را سفارشی سازی کنید. می توانید رفتار کلاس ها را قبل از اینکه حتی نمونه ای از آنها ساخته شود، تغییر دهید. این ابزار قدرتمند برای فریمورک ها و کتابخانه هایی است که نیاز به اعمال قوانین یا الگو های خاصی در زمان تعریف کلاس دارند، مانند ORM ها یا فریمورک های تست.
پرسش:
چگونه می توان از 'functools.partial' برای ایجاد توابع جدید با برخی آرگو مان های از پیش تعیین شده استفاده کرد؟
پاسخ:
functools.partial یک تابع در ماژول functools پایتون است که به شما اجازه می دهد یک تابع جدید ایجاد کنید که تابع اصلی را با برخی از آرگو مان هایش از پیش تعیین شده فراخوانی می کند. این کار زمانی مفید است که شما می خواهید یک تابع را با پارامتر های ثابت فراخوانی کنید، بدون اینکه نیاز باشد هر بار این پارامترها را مجدداً تعریف کنید. به عنوان مثال، partial(power, 2) یک تابع جدید ایجاد می کند که همیشه عدد اول را به توان 2 می رساند.
پرسش:
مفهوم 'weak references' در پایتون چیست و چه زمانی استفاده از آنها منطقی است؟
پاسخ:
Weak references به اشیاء اجازه می دهند تا بدون جلوگیری از garbage collection توسط مفسر پایتون، به اشیاء دیگر ارجاع دهند. این بدان معناست که اگر یک شیء فقط توسط weak references ارجاع داده شود، garbage collector می تواند آن را پاکسازی کند. Weak references زمانی مفید هستند که می خواهید از ایجاد cycle های ارجاع (reference cycles) که می توانند منجر به نشت حافظه شوند، جلوگیری کنید، یا زمانی که می خواهید یک کش (cache) بسازید که اشیاء قدیمی تر را به طور خودکار حذف کند.
منبع آموزشی این مطلب
این مطلب برگرفته از محصول آموزشی «سفری به دنیای پایتون: از اصول تا تکنیک های حرفه ای» است
برای مشاهده توضیحات کامل، جزئیات دوره و دریافت محصول، روی دکمه زیر کلیک کنید.
اطلاعات بیشتر و دریافت محصول