أسماء وظائف مولد بيثون - هل بادئة مفيدة؟ [مغلق
-
26-09-2019 - |
سؤال
معظم الوظائف سهلة التسمية. بشكل عام ، يعتمد اسم الوظيفة على ما تفعله أو نوع النتيجة التي تنتجها.
ومع ذلك ، في حالة وظيفة المولد ، يمكن أن تكون النتيجة أمرًا غير مرغوب فيه على نوع آخر.
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
من اسم الوظيفة ، وبدلاً من ذلك ، اختر اسمًا يؤكد على ما يفعله بدلاً من الأنواع.