پایتون را میشود با گرامر یک زبان دیگر نوشت و کار میکند. چیزی که فرق دارد این است که نسخه پایتونی معمولا اندیس ندارد، و اندیس همان جایی است که خطای یکیکم و یکیزیاد در آن زندگی میکند.
سه ردیف انبار بهشکل چندتایی، و پنج کاری که روزانه رویشان انجام میشود:
for kod, mojoodi, gheymat in radifha:بهجای خواندن باr[0]وr[1]enumerate(radifha, start=1)بهجای شمارنده دستی؛ عضو اولش(1, ('PL-14', 240, 18000))استdict(zip(kodha, gheymatha))بهجای حلقه رویrange(len(kodha)){k: m for k, m, _ in radifha}که میدهد{'PL-14': 240, 'PL-15': 180, 'PL-16': 95}max(radifha, key=lambda r: r[2])که گرانترین ردیف را میدهد، یعنیPL-16
زیرخط در ردیف چهارم قرارداد است و نه نحو: یعنی این مقدار را میگیرم و استفاده نمیکنم. خواننده بعدی از همان یک نویسه میفهمد که چیزی جا نیفتاده است.
سه چیزی که بیشتر از بقیه غافلگیر میکنند
برش رشته و فهرست سر بالا را شامل میشود و ته را نه: radifha[0:2] دو عضو میدهد. همین قاعده است که باعث میشود a[:n] و a[n:] دقیقا کل فهرست را بدون همپوشانی بپوشانند، و همین است که تقریبا همه خطاهای مرزی را حذف میکند.
فهرست و دیکشنری با انتساب کپی نمیشوند و همان شی مشترک میمانند، که موضوع مقدارها کجا مینشینند و چه وقت آزاد میشوند است. و مقایسه با is درباره یکی بودن شی است و نه برابری مقدار؛ برای مقدار همیشه ==، و is فقط برای None.
یک نویسه که وقت اشکالزدایی را نصف میکند
در رشته قالبی، علامت مساوی پس از نام، هم نام و هم مقدار را چاپ میکند: f"{jam=}" خروجی jam=515 میدهد. با چهار متغیر در یک سطر، همین یک نویسه در هر کدام، جای نوشتن دوباره نامها را میگیرد و جای اشتباه چاپ کردن یک نام با مقدار دیگری را هم میبندد. از پایتون 3.8 هست و بیشتر کسانی که سالها پایتون نوشتهاند هنوز از آن خبر ندارند.
جایی که کار گیر میکند، ترجمه از سی و جاواست
بیشتر کسانی که در ایران پایتون را شروع میکنند، پیش از آن در درسهای دانشگاهی سی یا جاوا دیدهاند. نتیجهاش کدی است که در پایتون کار میکند و پایتون نیست: حلقه روی range(len(...))، متغیر شمارنده، فهرست موقتی که با append پر میشود، و دو سطر برای کاری که یک عبارت است. این کد غلط نیست و همین است که تشخیصش را سخت میکند؛ فقط جای بیشتری برای اشتباه دارد. راه عملی این است: هر جا در کدتان range(len( دیدید، یکی از پنج ردیف بالا جایش را میگیرد.
ابزار، و سالی که این حرف درست است
در سال ۲۰۲۶، ruff ابزار پیشفرض است و همین دسته از الگوها را نامبهنام علامت میزند، از جمله حلقه روی range(len(...)) و ساختن فهرست با append جایی که یک عبارت کافی است. این ابزار جای زوج black و flake8 را گرفته که تا حدود سال ۲۰۲۳ استاندارد پایتون بودند، و رایگان و متنباز است. برای امتحان کردن سریع همین ردیفها، خود مفسر تعاملی کافی است و python3 بدون هیچ آرگومانی بازش میکند.
پرسش بعدی این است که چه چیزی همراه خود پایتون میآید و یک وابستگی کم میکند، که چیزی که همراه پایتون میآید و یک وابستگی کم میکند است. و وقتی چیزی لازم شد که همراهش نیست، نصب کتابخانه، و جدا نگه داشتن پروژهها از هم مرحله بعدی است.