ویرگول
ورودثبت نام
مهدی مشایخی
مهدی مشایخیمهدی مشایخی هستم. برنامه نویس هوش مصنوعی و پایتون در زمینه یادگیری ماشینی و عمیق. به همه کمک میکنم تا با هم رشد کنیم! من در توییتر: https://twitter.com/Mashayekhi_AI
مهدی مشایخی
مهدی مشایخی
خواندن ۶ دقیقه·۸ ماه پیش

ذن پایتون (Zen Python) چیست؟ درکی برای برنامه نویسی بهتر!

 ذن پایتون (Zen Python) چیست؟ | مهدی مشایخی
ذن پایتون (Zen Python) چیست؟ | مهدی مشایخی


ذن پایتون چیست و چگونه به وجود آمد؟

در دنیای برنامهنویسی، زبانهای مختلفی بر اساس اصول و فلسفههای خاصی طراحی شدهاند. پایتون به عنوان یکی از محبوبترین زبانهای برنامهنویسی، دارای مجموعهای از اصول طراحی است که به آن ذن پایتون (The Zen of Python) گفته میشود. این اصول راهنمایی برای نوشتن کدی خوانا، ساده و قابل فهم هستند.

ذن پایتون مجموعهای از ۱۹ اصل فلسفی است که به توصیف شیوهی طراحی زبان پایتون میپردازد. این اصول، که توسط تیم پیترز (Tim Peters) تدوین شدهاند، به توسعهدهندگان کمک میکنند تا کدی شفاف، ساده و قابل درک بنویسند.

برای مشاهده این اصول در محیط پایتون، میتوان دستور زیر را اجرا کرد:

import this


Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea – let’s do more of those!

پس از اجرای این دستور، متنی شامل اصول ذن پایتون نمایش داده میشود که راهنمایی برای سبک کدنویسی در این زبان است.


در سال ۱۹۹۹، تیم پیترز که یکی از توسعهدهندگان برجستهی پایتون بود، این اصول را ارائه کرد. او این مجموعه را به عنوان خلاصهای از فلسفهی طراحی پایتون منتشر نمود تا توسعهدهندگان بتوانند از آن به عنوان یک راهنمای کلی در برنامهنویسی با پایتون بهره ببرند.

این اصول نه بهعنوان یک استاندارد اجباری، بلکه به عنوان یک راهنمای ذهنی برای نوشتن کدی تمیز و خوانا مطرح شدهاند. با گذشت زمان، ذن پایتون به بخشی از فرهنگ برنامهنویسی با پایتون تبدیل شد و امروزه بسیاری از توسعهدهندگان به آن پایبند هستند.


1. زیبایی مهمتر از زشتی است (Beautiful is better than ugly)

در زمینهی برنامهنویسی، زیبایی به سادگی، وضوح و خوانایی کد اشاره دارد. یک کد زیبا، دارای ساختار مناسب، نامگذاری واضح و نگارش منظم است، در حالی که کدی که بدون نظم و پیچیده نوشته شده باشد، زشت و ناخوانا محسوب میشود.

مثال ۱: کد زشت و ناخوانا

در این نمونه، کد بهگونهای نوشته شده که خواندن و درک آن دشوار است:

def c(x): return x*x + 2*x + 1 print(c(5))
  • نام تابع "c" گویا نیست.
  • کد در یک خط نوشته شده که خوانایی را کاهش میدهد.
  • مشخص نیست که این تابع چه کاری انجام میدهد.

مثال ۲: کد زیبا و خوانا

در این نمونه، همان عملیات بهشکلی زیبا و خوانا پیادهسازی شده است:

def calculate_quadratic_x): &quot&quot&quotCalculate the value of the quadratic expression: x^2 + 2x + 1.&quot&quot&quot return x * x + 2 * x + 1 result = calculate_quadratic_5) print(result)
  • نام تابع گویا است.
  • مستندات (Docstring) اضافه شده است.
  • خوانایی و نظم کد رعایت شده است.



2. واضح بودن بهتر از پیچیدگی است (Explicit is better than implicit)

کد واضح، مستقیم و بدون ابهام است. به عبارت دیگر، فردی که کد را میخواند، بدون نیاز به حدس زدن متوجه عملکرد آن میشود. در مقابل، کدهای پیچیده و مبهم، نیاز به تحلیل و بررسی عمیق دارند و درک آنها زمانبر خواهد بود.

مثال ۱: کد مبهم و پیچیده

کد زیر بهصورت ضمنی نوشته شده و خوانایی کمی دارد:

a = [1, 2, 3, 4] b = [] for i in a: b.append(i * 2)
  • مشخص نیست a و b چه نقشی در برنامه دارند.
  • کد بهصورت فشرده در یک خط نوشته شده که خوانایی را کاهش داده است.

مثال ۲: کد واضح و خوانا

در این نمونه، همان عملیات بهصورت صریح و روشن نوشته شده است:

numbers = [1, 2, 3, 4] doubled_numbers = [] for number in numbers: doubled_numbers.append(number * 2) print(doubled_numbers)
  • نام متغیرها معنیدار و گویا انتخاب شدهاند.
  • ساختار کد مرتب است و بهراحتی میتوان فهمید که چه عملیاتی انجام میشود.


3. ساده بودن بهتر از پیچیدگی است (Simple is better than complex)

یک کد ساده، واضح، خوانا و بدون پیچیدگی غیرضروری است. در مقابل، کد پیچیده معمولاً شامل بخشهای اضافه و غیرضروری است که باعث سردرگمی و افزایش احتمال بروز خطا میشود.

مثال ۱: کد پیچیده و غیرضروری

کد زیر یک عدد را بررسی میکند که آیا زوج است یا نه، اما به شکلی پیچیده نوشته شده است:

def is_even(number): if number % 2 == 0: return True else: return False
  • این کد بیش از حد طولانی است.
  • شرط if-else غیرضروری بوده و میتوان آن را سادهتر نوشت.

مثال ۲: کد ساده و کارآمد

کد بالا را میتوان به صورت سادهتر و خواناتر نوشت:

def is_even(number): &quot&quot&quotCheck if a number is even.&quot&quot&quot return number % 2 == 0
  • کد کوتاهتر، خواناتر و همچنان کاملاً قابل فهم است.
  • مستندات (Docstring) اضافه شده است تا عملکرد تابع واضحتر باشد.


4. پیچیدگی بهتر از درهمریختگی است (Complex is better than complicated)

🔹 پیچیدگی: زمانی که یک مسئله نیاز به ساختار منطقی و طراحی دقیق دارد، اما همچنان خوانایی و سازماندهی حفظ میشود.
🔹 درهمریختگی: زمانی که عدم سازماندهی، نامگذاریهای نامناسب و ساختار نامرتب باعث میشود که کد غیرقابل فهم و نگهداری شود.

مثال ۱: کد درهمریخته و غیرقابل فهم

در این مثال، تابعی برای محاسبهی سری فیبوناچی نوشته شده که بهشدت پیچیده و نامرتب است:

def f(n, m={0: 0, 1: 1}): if n in m: return m[n] m[n] = f(n-1, m) + f(n-2, m) return m[n]
  • نام متغیرها گویا نیستند.
  • ساختار کد نامرتب است.
  • کد اگرچه کار میکند، اما درک آن دشوار و گیجکننده است.

مثال ۲: کد پیچیده اما ساختارمند و خوانا

همان تابع به روشی بهینه و خوانا بازنویسی شده است:

def fibonacci(n, memo=None): &quot&quot&quotCalculate the nth Fibonacci number using memoization.&quot&quot&quot if memo is None: memo = {0: 0, 1: 1} if n in memo: return memo[n] memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo) return memo[n]
  • نامگذاری متغیرها گویا و معنادار است.
  • کد ساختار منظم و خوانایی بالایی دارد.
  • مستندات (Docstring) اضافه شده تا عملکرد تابع مشخص باشد.


5. تخت بودن بهتر از تو در تو بودن است (Flat is better than nested)

🔹 کد تخت (Flat): ساختار کد تا حد ممکن ساده، سطحی و مستقیم است.
🔹 کد تو در تو (Nested): دارای چندین بلوک شرطی یا حلقههای تو در تو است که خوانایی را کاهش میدهد.

مثال ۱: کد با ساختار تو در تو (Nested) غیرضروری

در این مثال، بررسی میشود که آیا یک عدد مثبت است یا خیر، اما کد بهشدت تو در تو نوشته شده است:

def check_number(n): if n > 0: if n % 2 == 0: return &quotPositive Even&quot else: return &quotPositive Odd&quot else: return &quotNot Positive&quot
  • تو در تو بودن غیرضروری باعث کاهش خوانایی شده است.
  • فهمیدن منطق کد زمانبر و دشوارتر شده است.

مثال ۲: کد تخت و خوانا

همین عملیات را میتوان با ساختار تخت و سادهتر نوشت:

def check_number(n): &quot&quot&quotDetermine if a number is positive and even or odd.&quot&quot&quot if n <= 0: return &quotNot Positive&quot return &quotPositive Even&quot if n % 2 == 0 else &quotPositive Odd&quot
  • تو در تو بودن حذف شده و کد خواناتر شده است.
  • منطق برنامه روشنتر و قابل فهمتر است.
  • مستندات (Docstring) اضافه شده است.



مهمترین اصل ، این پنج اصل میباشد ولی باقی به مرور اضافه خواهد شد!
amp quotبرنامه‌نویسی پایتون
۲
۰
مهدی مشایخی
مهدی مشایخی
مهدی مشایخی هستم. برنامه نویس هوش مصنوعی و پایتون در زمینه یادگیری ماشینی و عمیق. به همه کمک میکنم تا با هم رشد کنیم! من در توییتر: https://twitter.com/Mashayekhi_AI
شاید از این پست‌ها خوشتان بیاید