نکات کلیدی
1. توابع پایتون اشیاء درجه یک هستند
توابع اشیاء هستند—میتوان آنها را به متغیرها اختصاص داد، در ساختارهای داده ذخیره کرد، به توابع دیگر ارسال و از آنها بازگرداند.
توابع به عنوان داده. در پایتون، توابع به عنوان شهروندان درجه یک در نظر گرفته میشوند، به این معنی که میتوان با آنها مانند هر شیء دیگری کار کرد. این امر امکان استفاده از پارادایمهای برنامهنویسی قدرتمند را فراهم میکند:
- اختصاص توابع به متغیرها
- ذخیره توابع در لیستها، دیکشنریها یا سایر ساختارهای داده
- ارسال توابع به عنوان آرگومان به توابع دیگر
- بازگرداندن توابع از توابع دیگر
- تعریف توابع درون توابع دیگر (توابع تو در تو)
این انعطافپذیری تکنیکهای پیشرفته برنامهنویسی مانند توابع مرتبه بالا، بستهها و الگوهای برنامهنویسی تابعی را ممکن میسازد و پایتون را به زبانی همهکاره و بیانی برای حل مسائل پیچیده تبدیل میکند.
2. دکوراتورها رفتار توابع را بهبود و تغییر میدهند
دکوراتورها بلوکهای ساختاری قابل استفاده مجددی تعریف میکنند که میتوانید برای تغییر رفتار یک تابع قابل فراخوانی بدون تغییر دائمی آن اعمال کنید.
شکر نحوی برای تغییر. دکوراتورها راهی تمیز و قابل استفاده مجدد برای گسترش یا تغییر رفتار توابع یا کلاسها ارائه میدهند:
- آنها یک تابع را میپیچند و رفتار آن را بدون تغییر کد منبع تغییر میدهند
- استفادههای رایج شامل لاگگیری، زمانبندی، کنترل دسترسی و کش کردن است
- دکوراتورها میتوانند روی هم قرار گیرند و به یک تابع واحد چندین تغییر اعمال کنند
- آنها اصل جداسازی نگرانیها را ترویج میدهند و کد را مدولار نگه میدارند
دکوراتورها با استفاده از نحو @
پیادهسازی میشوند و کد را خواناتر و قابل نگهداریتر میکنند. آنها از توابع درجه یک و بستههای پایتون برای ارائه مکانیزمی قدرتمند برای متا-برنامهنویسی استفاده میکنند.
3. *args و **kwargs امکان انعطافپذیری در آرگومانهای تابع را فراهم میکنند
*args و **kwargs به شما اجازه میدهند توابعی با تعداد متغیر آرگومانها در پایتون بنویسید.
انعطافپذیری آرگومانهای متغیر. این عناصر نحو خاص به توابع اجازه میدهند هر تعداد آرگومان موقعیتی یا کلیدواژهای را بپذیرند:
*args
آرگومانهای موقعیتی اضافی را به یک تاپل جمعآوری میکند**kwargs
آرگومانهای کلیدواژهای اضافی را به یک دیکشنری جمعآوری میکند- آنها انعطافپذیری در تعریف توابع را فراهم میکنند و امکان گسترش آینده را میدهند
- برای ایجاد توابع پوششی یا APIهایی با پارامترهای اختیاری مفید هستند
این ویژگی امکان ایجاد توابع عمومیتر را فراهم میکند و به نوشتن کدی کمک میکند که میتواند بدون تغییر امضای تابع به نیازهای در حال تغییر سازگار شود.
4. درکها نحو مختصری برای ایجاد مجموعهها ارائه میدهند
درکها فقط شکر نحوی فانتزی برای یک الگوی حلقه for ساده هستند.
ایجاد مجموعههای زیبا. درکهای لیست، مجموعه و دیکشنری راهی فشرده برای ایجاد مجموعهها بر اساس تکرارگرهای موجود ارائه میدهند:
- آنها ایجاد و پر کردن یک مجموعه را در یک خط ترکیب میکنند
- اغلب خواناتر و سریعتر از حلقههای for معادل هستند
- میتوانند شامل شرایطی برای فیلتر کردن عناصر باشند
- برای لیستها، مجموعهها و دیکشنریها در دسترس هستند
مثالها:
- درک لیست:
[x*2 for x in range(10) if x % 2 == 0]
- درک مجموعه:
{word.lower() for word in words}
- درک دیکشنری:
{k: v**2 for k, v in my_dict.items()}
در حالی که قدرتمند هستند، مهم است که تعادل بین اختصار و خوانایی را حفظ کنید و از درکهای بیش از حد پیچیده که ممکن است نیت کد را مبهم کنند، اجتناب کنید.
5. توابع و عبارات مولد ایجاد تکرارگرها را ساده میکنند
مولدها بسیاری از کدهای تکراری مورد نیاز هنگام نوشتن تکرارگرهای مبتنی بر کلاس را انتزاع میکنند.
تکرار بدون زحمت. مولدها راهی ساده برای ایجاد تکرارگرها بدون نیاز به پیادهسازی کامل کلاس ارائه میدهند:
- از کلمه کلیدی
yield
برای تولید یک سری مقادیر استفاده کنید - از نظر حافظه کارآمد هستند، زیرا مقادیر را به صورت لحظهای تولید میکنند
- میتوانند در حلقههای for، درکهای لیست و سایر زمینههای تکرارگر استفاده شوند
- عبارات مولد نحو مختصری برای مولدهای ساده ارائه میدهند
توابع مولد:
def countdown(n):
while n > 0:
yield n
n -= 1
عبارت مولد:
squares = (x*x for x in range(10))
مولدها به ویژه برای کار با مجموعه دادههای بزرگ یا توالیهای بینهایت مفید هستند، زیرا همه مقادیر را به طور همزمان در حافظه ذخیره نمیکنند.
6. دیکشنریها ساختارهای دادهای همهکاره و قدرتمند هستند
دیکشنریها ساختار داده مرکزی در پایتون هستند.
ذخیرهسازی کلید-مقدار کارآمد. دیکشنریها آرایههای انجمنی سریع، انعطافپذیر و غنی از ویژگیها ارائه میدهند:
- پیچیدگی زمانی متوسط O(1) برای جستجوی کلید، درج و حذف
- از هر شیء قابل هش به عنوان کلید پشتیبانی میکنند (رشتهها، اعداد، تاپلها)
- روشهایی مانند
get()
برای دسترسی ایمن به کلیدها با مقادیر پیشفرض ارائه میدهند - میتوانند برای شبیهسازی عبارات switch/case از زبانهای دیگر استفاده شوند
ویژگیهای پیشرفته دیکشنری:
- OrderedDict: ترتیب کلیدهای وارد شده را به خاطر میسپارد
- defaultdict: مقادیر پیشفرض برای کلیدهای گمشده ارائه میدهد
- ChainMap: جستجو در چندین دیکشنری به عنوان یک نگاشت واحد
دیکشنریها برای پیادهسازی پایتون اساسی هستند و به طور گسترده در خود زبان و در بسیاری از کتابخانهها و فریمورکهای پایتون استفاده میشوند.
7. تکنیکهای حلقهزنی مؤثر خوانایی کد را بهبود میبخشند
نوشتن حلقههای به سبک C در پایتون غیرپایتونی در نظر گرفته میشود.
تکرار پایتونی. پایتون چندین روش ایدئوماتیک برای حلقهزنی بر روی توالیها و انجام تکرارها ارائه میدهد:
- از
for item in iterable
به جای ایندکسگذاری استفاده کنید - هنگامی که به هر دو ایندکس و مقدار نیاز دارید از
enumerate()
استفاده کنید - از
zip()
برای حلقهزنی بر روی چندین توالی به طور همزمان استفاده کنید - از ماژول
itertools
برای تکرارهای پیچیده بهره ببرید
مثالها:
# به جای:
for i in range(len(items)):
print(i, items[i])
# استفاده کنید:
for i, item in enumerate(items):
print(i, item)
# حلقهزنی بر روی دو لیست:
for name, age in zip(names, ages):
print(f"{name} is {age} years old")
این تکنیکها به کدی مختصرتر، خواناتر و کارآمدتر منجر میشوند و با فلسفه پایتون در مورد وضوح و سادگی همسو هستند.
8. مفاهیم برنامهنویسی شیءگرا سازماندهی کد را بهینه میکنند
کلاسهای پایه انتزاعی (ABCs) اطمینان میدهند که کلاسهای مشتق شده روشهای خاصی از کلاس پایه را پیادهسازی میکنند.
طراحی کد ساختاریافته. ویژگیهای شیءگرای پایتون ابزارهای قدرتمندی برای سازماندهی و ساختاردهی کد ارائه میدهند:
- کلاسها داده و رفتار را محصور میکنند
- وراثت امکان استفاده مجدد از کد و تخصصیسازی را فراهم میکند
- کلاسهای پایه انتزاعی رابطها را تعریف و پیادهسازی را تحمیل میکنند
- ویژگیها دسترسی کنترلشده به ویژگیها را فراهم میکنند
- روشهای خاص (روشهای دندر) امکان سفارشیسازی رفتار شیء را فراهم میکنند
مفاهیم کلیدی OOP در پایتون:
- چندریختی از طریق تایپ اردکی
- وراثت چندگانه و ترتیب حل روش (MRO)
- ترکیب به عنوان جایگزینی برای وراثت
- متاکلاسها برای کنترل پیشرفته ایجاد کلاس
استفاده مؤثر از اصول OOP به ساختارهای کدی قابل نگهداریتر، قابل توسعهتر و مدولارتر منجر میشود.
9. ساختارهای داده در پایتون عملکردهای متنوعی ارائه میدهند
اگر به دنبال پشتیبانی از پردازش موازی نیستید، پیادهسازی ارائه شده توسط collections.deque یک انتخاب پیشفرض عالی برای پیادهسازی یک ساختار داده صف FIFO در پایتون است.
سازماندهی داده متناسب. پایتون مجموعهای غنی از ساختارهای داده داخلی و کتابخانه استاندارد را برای رفع نیازهای مختلف ارائه میدهد:
- لیستها: آرایههای پویا برای توالیهای عمومی
- تاپلها: توالیهای غیرقابل تغییر برای مجموعههای ثابت
- مجموعهها: مجموعههای بدون ترتیب از عناصر منحصر به فرد
- دکها: صفهای دو سر برای درج/حذف کارآمد در هر دو انتها
- Heapq: پیادهسازی صف اولویت
- Counter: چندمجموعه برای شمارش اشیاء قابل هش
انتخاب ساختار داده مناسب میتواند به طور قابل توجهی بر عملکرد و وضوح کد شما تأثیر بگذارد. عواملی مانند:
- عملیات مورد نیاز (مثلاً درجهای مکرر، حذفها، جستجوها)
- استفاده از حافظه
- نیازهای ایمنی رشته
- نیاز به ترتیب یا مرتبسازی
درک ویژگیها و مبادلات ساختارهای داده مختلف راهحلهای کارآمدتر و زیباتری برای مسائل برنامهنویسی فراهم میکند.
10. قالببندی کارآمد رشته وضوح کد را افزایش میدهد
اگر رشتههای قالب شما توسط کاربر تأمین میشوند، از رشتههای قالب برای جلوگیری از مسائل امنیتی استفاده کنید. در غیر این صورت، از درج رشتههای ادبی اگر در پایتون 3.6+ هستید و از قالببندی رشته "سبک جدید" اگر نیستید، استفاده کنید.
ساختار رشتهای واضح و امن. پایتون چندین روش برای قالببندی رشته ارائه میدهد که هر کدام نقاط قوت خود را دارند:
- قالببندی %-: سبک قدیمی، هنوز به طور گسترده استفاده میشود
- str.format(): خواناتر و انعطافپذیرتر
- f-strings: مختصر و قدرتمند، در پایتون 3.6+ در دسترس
- رشتههای قالب: ایمنتر برای قالبهای تأمین شده توسط کاربر
مثال f-strings:
name = "Alice"
age = 30
print(f"{name} is {age} years old")
رشتههای قالب برای ورودی کاربر:
from string import Template
user_input = Template("Hello, $name!")
print(user_input.substitute(name="Bob"))
انتخاب روش مناسب قالببندی رشته خوانایی، قابلیت نگهداری و امنیت کد را بهبود میبخشد، به ویژه هنگام کار با دادههای تأمین شده توسط کاربر یا ساختارهای رشتهای پیچیده.
آخرین بهروزرسانی::
نقد و بررسی
کتاب ترفندهای پایتون به دلیل رویکرد مختصر و در عین حال عمیق خود به موضوعات متوسط و پیشرفته پایتون بسیار مورد تحسین قرار گرفته است. خوانندگان از نکات عملی، توضیحات واضح و تمرکز بر بهترین شیوهها قدردانی میکنند. بسیاری از آن به عنوان منبعی مفید برای پر کردن شکافهای دانشی و بهبود مهارتهای کدنویسی یاد کردهاند. لحن محاورهای و ساختار منظم کتاب، آن را قابل دسترس و لذتبخش میسازد. در حالی که برخی از توسعهدهندگان با تجربه آن را کمتر چالشبرانگیز یافتند، اکثر افراد توافق دارند که این کتاب منبعی عالی برای کسانی است که به دنبال تعمیق دانش خود در پایتون و نوشتن کدهای بیشتر به سبک بومی هستند.