"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > بايثون: أنماط التعليمات البرمجية المثيرة للاهتمام

بايثون: أنماط التعليمات البرمجية المثيرة للاهتمام

تم النشر بتاريخ 2024-11-08
تصفح:209

Python: Interesting Code Patterns

أعمل في الغالب مع بايثون وأراجع الكود بشكل يومي تقريبًا. في تنسيق قاعدة التعليمات البرمجية لدينا، يتم التعامل مع عملية الفحص بواسطة وظائف CI باستخدام الأسود وmypy. لذلك، نحن نركز فقط على التغييرات.

عند العمل ضمن فريق، فأنت تعرف بالفعل نوع التعليمات البرمجية التي تتوقعها من عضو معين في الفريق. تصبح مراجعات الكود مثيرة للاهتمام عندما ينضم شخص جديد إلى الفريق. أقول إنه أمر مثير للاهتمام، حيث أن كل شخص لديه أسلوب ما في البرمجة يستخدمه دون وعي؛ للخير أو للشر! مثل لدي بعض،

  1. تعيين قيمة النوع الاختياري. عادة ما تكون هذه المتغيرات جزءًا من التوقيع
# I used (long back) to do

def func(a: int, b: Optional[list] = None, c: Optional[Dict] = None):

    if b is None:
       b = []
    if c is None:
       c = {}

# Instead I do

def func(a: int, b: Optional[list] = None, c: Optional[Dict] = None):

    b = b or []
    c = c or {}
  1. التعامل مع عبارات if..elif..else البسيطة (حتى 3-4) باستخدام الإملاء

هذه حالة استخدام بسيطة حيث تقوم بإرجاع سلسلة أو استدعاء func بناءً على بعض القيمة

ملاحظة: من الإصدار 3.10 يجب عليك استخدام المطابقة بدلاً من هذا.

بدلاً من القيام،

def get_number_of_wheels(vehicle: str):
    if vehicle == "car":
        wheels = 2
    elif vehicle == "bus":
        wheels = 6
    elif vehicle == "bicycle":
        wheels = 2
    else:
        raise ...

# I prefer doing, 

def get_number_of_wheels(vehicle: str):
    return {
       "car": 2,
       "bus": 6,
       "bicycle": 2
    }[vehicle]       # Raise is now KeyError

هناك بعض الأمثلة أعلاه، والأشخاص الذين يراجعون الكود الخاص بي سيكون لديهم المزيد من الأمثلة.

مؤخرًا، انضم مطور جديد إلى فريقي ولاحظت نمطًا أعجبني ولكنني طلبت تغييره إلى حالة بسيطة if..else. سأعرض لك النموذج أولاً ثم سأوضح سبب طلب التغيير.

الكود عبارة عن مصمم يقوم بعمل شيء ما للمعلمات. لنكتب ديكورًا بسيطًا (عديم الفائدة) والذي سيطبع عدد الوسائط وkwargs التي تم استدعاء الوظيفة/الطريقة بها.

def counter(is_cls_method: bool = False):
    """ print number of args & kwargs for func/method """
    def outer(f):
        def inner(*args, **kwargs):
            args_cnt = len(args)
            kwargs_cnt = len(kwargs)
            print(f"{f.__name__} called with {args_cnt=} & {kwargs_cnt=}")
            return f(*args, **kwargs)
        return inner
    return outer

@counter()
def test1(a, b, c):
    pass

class A:
    @counter(is_cls_method=True)
    def test1(self, a, b, c):
        pass


print("function")
test1(1, 2, c=3)
test1(a=1, b=2, c=3)

print("method")
a = A()
a.test1(1, 2, 3)
a.test1(1, b=2, c=3)

عند تشغيل هذا الكود، يجب أن تشاهد

function
test1 called with args_cnt=2 & kwargs_cnt=1
test1 called with args_cnt=0 & kwargs_cnt=3

method
test1 called with args_cnt=4 & kwargs_cnt=0
test1 called with args_cnt=2 & kwargs_cnt=2

إنه يعمل بشكل جيد ولكن بالنسبة للطرق، فإنه يحسب نفسه أيضًا. لذلك دعونا إصلاح ذلك!

def counter(is_cls_method: bool = False):
    def outer(f):
        def inner(*args, **kwargs):
            args_cnt = len(args)

            if is_cls_method:   # Check added
               args_cnt -= 1    # Reduced count by 1

            kwargs_cnt = len(kwargs)
            print(f"{f.__name__} called with {args_cnt=} & {kwargs_cnt=}")
            return f(*args, **kwargs)
        return inner
    return outer

هذه عبارة if بسيطة، لكن المطور الجديد فعل شيئًا آخر كان استخدامًا مثيرًا للاهتمام للمنطق.

أظهر فقط الرمز الذي تم تغييره...

   args_cnt = len(args[is_cls_method:])

الحل أفضل بكثير من استخدام if، حيث أن bool في python هو int فقط. كان الكود الأصلي أطول قليلاً، وملاحظة هذا التغيير الطفيف ليس واضحًا، كما أن قاعدة التعليمات البرمجية المستخدمة من قبل المستخدمين الأساسيين لبايثون. وإذا كان عليك تخمين ما يفعله الخط، فأعتقد أنه يجب عليك التغيير لجعله واضحًا.

ما رأيك في هذا، هل تستخدم القيمة المنطقية كمؤشر؟
هل لديك المزيد من أنماط بايثون مثل هذه؟

بيان الافراج تم نشر هذه المقالة على: https://dev.to/ninadmhatre/python-interesting-code-patterns-dh3?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3