2011-11-21 24 views
5

पर फ़िथन नामकरण सम्मेलनों के लिए पाइथन नामकरण सम्मेलन जो पाइथन में नामकरण सम्मेलनों का एक संशोधित ऑब्जेक्ट लौटा सकता है या जो केवल इंस्टेंस को संशोधित करता है।ऑब्जेक्ट को संशोधित करने या संशोधित प्रतिलिपि

मान लीजिए कि आप दोनों को कार्यान्वित करना चाहते हैं, आपको कार्यों का नाम कैसे देना चाहिए?

उदाहरण: मान लें कि आप एक छवि ऑब्जेक्ट के लिए crop() फ़ंक्शन चाहते हैं। मैं रूबी यह आसान था क्योंकि यदि आप मूल उदाहरण को संशोधित करते हैं तो आपको crop() का उपयोग करना चाहिए यदि आप एक प्रतिलिपि वापस लेते हैं और crop!() करते हैं।

उत्तर

5

कुछ पीईपी में सटीक दिशानिर्देश नहीं है, लेकिन यह सुनिश्चित नहीं है कि पाइथन कोर में कुछ फ़ंक्शन/विधि कैसे काम करती हैं, मैं व्यक्तिगत रूप से क्रिया संयोग का उपयोग करता हूं। उदाहरण के लिए, प्रेरित द्वारा:

>>> l = list('hello world') 
>>> l 
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'] 
>>> sorted(l) 
[' ', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w'] 
>>> l 
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'] 
>>> l.sort() 
>>> l 
[' ', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w'] 

मैं अपने कार्यों crop() नाम होगा [जगह में वस्तु को संशोधित] और cropped() [एक संशोधित प्रतिलिपि वापसी]।

संपादित करें: मुझे रूबी नहीं पता है, लेकिन पाइथन में दोनों के बीच भेद पूरी तरह पारंपरिक है (कार्य/विधि व्यवहार आप इसे कैसे कहते हैं उससे स्वतंत्र है)।

एचटीएच!

1

इस AFAIK के लिए कोई "पायथन-चौड़ा" सम्मेलन नहीं है। हालांकि, जिस परियोजना पर मैं काम करता हूं वह एक सम्मेलन है जो आपके लिए उपयोगी हो सकता है: यदि कोई फ़ंक्शन अपनी तर्क को संशोधित कर सकता है, तो उसके पास copy kwarg है जो यह निर्धारित करता है कि यह उसके इनपुट की एक प्रति पर चलता है, और True पर डिफ़ॉल्ट है।

def crop(x, copy=True): 
    if copy: 
     x = x.copy() 
    _do_inplace_crop(x) 
    return x 
2

मानक पुस्तकालय में, वहाँ list.sort() और list.reverse() तरह के तरीकों जो जगह में list संशोधित, और sorted() और reversed() की तरह कार्य करता है जो कुछ नया (reversed() एक नई सूची पुनरावर्तक के बजाय रिटर्न) लौट आते हैं। लेकिन अगर यह किसी समारोह की तुलना में एक उदाहरण विधि रखने के लिए अधिक समझ में आता है, तो मैं इस सम्मेलन को रखने के लिए ऐसा नहीं करूंगा।

न्यूमपी में, कई कार्यों और विधियों में out कीवर्ड तर्क है जो आपको यह निर्दिष्ट करने की अनुमति देता है कि आउटपुट को एक नया बनाने के बजाय मौजूदा सरणी पर जाना चाहिए। आप इनपुट एरे में से out सरणी भी बना सकते हैं।

0

अगर मैं कुछ जगह में परिवर्तनीय होना चाहता हूँ, मैं एक विधि लिखना होगा:

smth.crop() 

और अगर मैं यह चाहते हैं एक संशोधित वस्तु वापस जाने के लिए, तो मैं एक समारोह का प्रयोग करेंगे:

crop(smth) 

इस तरह आप कार्यात्मक शैली (कोई साइड इफेक्ट्स) में कार्य नहीं करते हैं, और ओओपी शैली (दुष्प्रभावों के साथ) में विधियां रखते हैं।

हालांकि, मैं यह भी चाहता हूं कि पाइथन ने रूबी और लिस्प जैसे फ़ंक्शन नामों में ! और ? वर्णों की अनुमति दी।

+0

'?' के लिए, भविष्यवाणी के लिए एक आम सम्मेलन है - फ़ंक्शन नाम की शुरुआत में 'is' का उपयोग करें। –

+1

कभी-कभी 'has_' भी होता है। – Halst

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