9

अधिकांश कार्यों का नाम आसान है। आम तौर पर, एक फ़ंक्शन नाम उस पर आधारित होता है जो यह करता है या इसके परिणामस्वरूप इसका परिणाम क्या होता है।पायथन जनरेटर फ़ंक्शन नाम - एक उपसर्ग सहायक है?

जनरेटर फ़ंक्शन के मामले में, हालांकि, परिणाम किसी अन्य प्रकार पर एक पुनरावर्तनीय हो सकता है।

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

sometype नाम भ्रामक लगता है, के बाद से समारोह नामित प्रकार का ऑब्जेक्ट वापस नहीं करता है। यह वास्तव में sometype से अधिक पुनरावृत्त है।

iter_sometype या gen_sometype जैसे नाम Hungarian Notation जैसा थोड़ा सा लगता है। हालांकि, यह समारोह के इरादे को स्पष्ट करने के लिए भी प्रतीत होता है।

आगे बढ़ते हुए, कई और विशेष मामले हैं, जहां एक उपसर्ग उपयोगी हो सकता है। ये सामान्य उदाहरण हैं, जिनमें से कुछ 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_ उपसर्ग में मदद करता है एक जनरेटर समारोह का नाम स्पष्ट? या यह सिर्फ दृश्य अव्यवस्था है?

यदि कोई उपसर्ग सहायक है, तो आपके पास कौन से उपसर्ग सुझाव हैं?

वैकल्पिक रूप से, यदि कोई प्रत्यय सहायक है, तो आपके पास पर्याप्त प्रत्यय सुझाव क्या हैं?

+0

मुझे लगता है कि आप सामान्यीकृत प्रकार से अधिक हैं .. मेरा मतलब है, अधिकांश आपके जेनरेटर एक्सप्रेशन एला '(कुछ_मैपिंग (x) को एक्स में अक्षरों के रूप में सीधे लिखेंगे)। पहला व्यक्ति वास्तव में कुछ भी कम नहीं करता है, यह मैपिंग की तरह अधिक है क्योंकि प्रत्येक 'x' के लिए एक नया 'sometype' है। –

+1

@ THC4k: कृपया कल्पना करें कि वे अधिक जटिल हैं।'Itertools' के भीतर आसानी से फिट करने के लिए बहुत जटिल है। इतना जटिल नहीं है कि वे बुनियादी कार्यात्मक प्रोग्रामिंग सिद्धांतों का उल्लंघन करते हैं। उदाहरण के लिए, उनमें ऑप्टिमाइज़ेशन के रूप में बहुत से प्रारंभिक सेटअप कार्य शामिल हो सकते हैं। –

उत्तर

6

पायथन dictsiter* विधियां हैं। और एलएक्सएमएल पेड़ों में iter विधि भी है। पढ़ना

for node in doc.iter(): 

, परिचित लगता है तो कि पैटर्न के बाद, मैं sometypes के एक जनरेटर के नामकरण sometypes_iter तो मैं analgously लिख सकता है कि विचार करना चाहते हैं,

for item in sometypes_iter(): 

अजगर एक sorted समारोह प्रदान करता है। उस पैटर्न के बाद , मैं क्रिया-कार्यों भूत काल बना सकता है:

sometypes_reduced 
sometypes_mapped 
sometypes_filtered 

आप इन कार्यों के लिए पर्याप्त है, तो यह, map भावना एक SomeTypes वर्ग बनाने के लिए कर सकता है तो विधि के नाम reduce के लिए छोटा किया जा सकता है , और filter

कार्यों को स्वीकार करने या sometype के अलावा अन्य प्रकार के लौटने के लिए, तो निश्चित रूप से यह मतलब होगा समारोह नाम से sometype दूर करने के लिए और इसके बदले एक ऐसा नाम है जो जोर देती है कि यह प्रकार के बजाय करता है चुनें सामान्यीकृत किया जा सकता है।

संबंधित मुद्दे