سؤال

معظم الوظائف سهلة التسمية. بشكل عام ، يعتمد اسم الوظيفة على ما تفعله أو نوع النتيجة التي تنتجها.

ومع ذلك ، في حالة وظيفة المولد ، يمكن أن تكون النتيجة أمرًا غير مرغوب فيه على نوع آخر.

def sometype( iterable ):
    for x in iterable:
        yield some_transformation( x )

ال sometype يبدو الاسم مضللاً ، نظرًا لأن الوظيفة لا تُرجع كائن من النوع المسماة. إنه حقًا أمر لا يطاق sometype.

اسم مثل iter_sometype أو gen_sometype يشعر كثيرا جدا مثل التدوين المجري. ومع ذلك ، يبدو أيضًا أنه يوضح نية الوظيفة.

المضي قدمًا ، هناك عدد من الحالات المتخصصة ، حيث قد تكون البادئة مفيدة. هذه أمثلة نموذجية ، بعضها متاح في itertools. ومع ذلك ، يتعين علينا في كثير من الأحيان كتابة نسخة تحتوي على بعض التعقيد الخوارزمي الذي يجعله مشابهًا ل itertools, ، ولكن ليس مناسبة مثالية.

def reduce_sometype( iterable ):
    summary = sometype()
    for x in iterable:
         if some_rule(x): 
             yield summary
             summary= sometype()
         summary.update( x )

 def map_sometype( iterable ):
     for x in iterable:
         yield some_complex_mapping( x )

 def filter_sometype( iterable ):
     for x in iterable:
         if some_complex_rule(x):
              yield x

هل iter_, map_, reduce_, filter_ بادئة مساعدة توضيح اسم وظيفة المولد؟ أم أنها مجرد فوضى بصرية؟

إذا كانت البادئة مفيدة ، فما هي اقتراحات البادئة التي لديك؟

بدلاً من ذلك ، إذا كانت اللاحقة مفيدة ، فما هي اقتراحات لاحقة؟

هل كانت مفيدة؟

المحلول

بيثون dicts لديك iter* طُرق. وأشجار LXML لديها أيضا iter طريقة. قراءة

for node in doc.iter():

يبدو مألوفًا ، لذلك بعد هذا النمط ، سأفكر في تسمية مولد Sometys sometypes_iterحتى أتمكن من الكتابة بشكل كبير ،

for item in sometypes_iter():

Python يوفر أ sorted وظيفة. بعد هذا النمط ، قد أجعل الوظائف الفعل الماضي مضارع:

sometypes_reduced
sometypes_mapped
sometypes_filtered

إذا كان لديك ما يكفي من هذه الوظائف ، فقد يكون من المنطقي جعل ملف SomeTypes الفصل حتى يمكن اختصار أسماء الأسلوب إلى reduce, map, ، و filter.

إذا كان من الممكن تعميم الوظائف لقبول أو إرجاع الأنواع بخلاف sometype, ، بالطبع سيكون من المنطقي الإزالة sometype من اسم الوظيفة ، وبدلاً من ذلك ، اختر اسمًا يؤكد على ما يفعله بدلاً من الأنواع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top