2012-01-27 20 views
16

लौटने वाले फ़ंक्शन का नाम आप एक ऐसे फ़ंक्शन का नाम कैसे देते हैं जो जनरेटर लौटाता है (यानी, return foo के बजाय yield foo का उपयोग करता है)?जनरेटर

  • यह निश्चित रूप से getFoo() नहीं है क्योंकि यह Foo का मान वापस नहीं करता है।
  • शायद यह foos() नहीं है क्योंकि मेरे पास एक आसान-से-भिन्न उपसर्ग होना चाहिए।
  • यह शायद listFoo() नहीं है क्योंकि यह list वापस नहीं करता है।
  • शायद यह iterateFoo() नहीं है क्योंकि यह उपसर्ग बहुत लंबा है।

आपका पसंदीदा समाधान क्या है?

अद्यतन: कुछ मामलों में एक पूरी तरह से अच्छा समाधान हो सकता है

जबकि foos(), ध्यान दें कि विधि के नाम एक क्रिया के साथ शुरू करते हैं। क्रिया इस विचार को व्यक्त करती है कि यह एक विधि है, डेटा फ़ील्ड नहीं, और इस प्रकार पठनीयता में मदद करता है। यदि संभव हो, तो मैं एक समाधान पसंद करूंगा जो डेटा फ़ील्ड से एक विधि बताना आसान बनाता है।

+4

किसने कहा कि उपसर्ग एक अच्छी बात है? 'Foos' पूरी तरह स्पष्ट क्यों नहीं है? – delnan

+0

एक विचार: genfoo() – sgallen

+0

मैं इस पर @delnan के साथ हूँ। 'foos' सही लगता है। आप एक पुनरावृत्त नाम कैसे करते हैं (उदा। एक सूची)? – zrxq

उत्तर

2

कुछ संक्षिप्त सुझाव:

getFoos() 
generateFoos() 
yieldFoos() 
allFoos() 

के बाद से आप सामान्य रूप से की जरूरत नहीं है एक जनरेटर बस अपने सभी foos प्राप्त करने के लिए, जनरेटर के विशिष्ट कार्य के लिए यह एक और दिलचस्प नाम का सुझाव देने के लिए बहुत आम है:

getActiveFoos() 
getGreenFoos() 
getFoosMatchingCriteria(someCriteria) 
getFoosOverTheNetworkIfTheDatabaseIsntBeingAJerkface() 
+0

... लेकिन सॉफ्टवेयर इंजीनियरिंग के मूल सिद्धांतों में से एक यह है कि डेटाबेस ** हमेशा ** होना एक jerkface ...;) –

+4

Camelcase पीईपी 8 के अनुरूप के रूप में नहीं माना जा सकता है (जहां तक ​​मुझे लगता है कि पीईपी 8 जेनरेटर के बारे में स्पष्ट नहीं है)। –

0

genFoo()

(... और कुछ अतिरिक्त शब्द सुनिश्चित इस समाधान कम से कम 30 अक्षर हैं)

14

मुझे लगता है कि foo या foos संभावनाएं हैं। या, Python2 dicts 'iteritems की नकल करने के लिए, आप iterfoo का उपयोग कर सकते हैं।

4

हालांकि उपयोगी काम करने के लिए यह अच्छा अभ्यास है जो इंगित करता है कि चीजें क्या करती हैं, मुझे नहीं लगता कि एक समारोह के रिटर्न प्रकार को इंगित करने के लिए Hungarian notation का उपयोग करना आवश्यक है।

वापसी प्रकार शायद टिप्पणी या docstring में प्रलेखित किया जाना चाहिए, लेकिन मेरा सुझाव है कि foos() कुछ की तरह, getfoos(), या get_foos() नाम के लिए सबसे अच्छा होगा।

यदि आप यह स्पष्ट करना चाहते हैं कि यह एक जनरेटर है, तो मैं iterfoos() को itervalues() जैसे पायथन 2 की विधियों की समानता के लिए सुझाव दूंगा।

ध्यान रखें कई बिल्ट-इन कार्य का उपयोग किया जाता है कि वापस जाने के लिए सूचियां अब अजगर 3 (map(), dict.values() आदि) में जनरेटर हैं, तो यह किसी को आश्चर्य नहीं होना चाहिए जब अपने कार्यों कि एक दृश्य लौट जनरेटर हैं, भले ही आप इसे generate_foos() या कुछ अन्य भिन्नता नहीं कहा।

3

सबसे सटीक होगा:

iterateFoo() 
iterate_foo() 
iter_foo() 
iterFoo() 

आप कहते हैं कि समारोह जबकि बहुत स्पष्ट किया जा रहा है यही कारण है कि आप इसका इस्तेमाल होता है विशेष रूप से क्या करता है।

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