2012-02-08 8 views
15

जब एक कंटेनर का नाम देकर और एक बेहतर कोडिंग शैली क्या:एक शब्दकोश के लिए एकवचन या बहुवचन पहचानकर्ता?

source = {} 
#... 
source[record] = some_file 

या

sources = {} 
#... 
sources[record] = some_file 

बहुवचन निर्माण पर अधिक प्राकृतिक पढ़ता है; असाइनमेंट पर एकवचन।

और यह एक निष्क्रिय सवाल नहीं है; जब मैं निश्चित नहीं था कि कोई चर कंटेनर या एक मान था, तो मुझे अपने पुराने कोड में भ्रमित हो गया।

अद्यतन

यह वहाँ एक आम सहमति है कि जब शब्दकोश एक मानचित्रण के रूप में प्रयोग किया जाता है, यह एक अधिक विस्तृत नाम का उपयोग करने के लिए बेहतर है लगता है (उदाहरण के लिए, recordToSourceFilename); और यदि मैं बिल्कुल संक्षिप्त नाम का उपयोग करना चाहता हूं, तो इसे बहुवचन बनाएं (उदा।, sources)।

+3

मैं ज्यादातर कंटेनरों के लिए बहुवचन रूपों का उपयोग करता हूं, लेकिन मैं केस-दर-मामले आधार पर निर्णय लेता हूं। यदि आप एकवचन रूप से भ्रमित हो गए हैं, तो शायद यह एक संकेत है। –

+1

@SvenMarnach: कृपया अपना उत्तर उत्तर के रूप में पोस्ट करें। –

उत्तर

11

मुझे लगता है कि दो शब्दकोशों कि अलग से पहचान की जानी चाहिए के साथ बहुत विशिष्ट उपयोग के मामले भी होते हैं। हालांकि, उन्हें संबोधित करने से पहले, यह ध्यान दिया जाना चाहिए कि शब्दकोशों के लिए परिवर्तनीय नाम लगभग हमेशा एकवचन होना चाहिए, जबकि सूचियों को लगभग हमेशा बहुवचन होना चाहिए। वस्तु की तरह संस्थाओं के रूप में

  1. शब्दकोश: बार कर रहे हैं आप एक शब्दकोश है कि वस्तु की तरह डेटा संरचना के कुछ प्रकार का प्रतिनिधित्व करता है, जब। इन उदाहरणों में, शब्दकोश लगभग हमेशा एकल ऑब्जेक्ट-जैसी डेटा संरचना को संदर्भित करता है, और इसलिए एकवचन होना चाहिए। मानचित्रण संस्थाओं के रूप में

    # assume that users is a list of users parsed from some JSON source 
    # assume that each user is a dictionary, containing information about that user 
    
    for user in users: 
        print user['name'] 
    
  2. शब्दकोश: उदाहरण के लिए: अन्य बार, अपने शब्दकोश अधिक एक विशिष्ट हैश मैप की तरह बर्ताव कर रहा हो सकता है। ऐसे मामले में, एक और प्रत्यक्ष नाम का उपयोग करना सबसे अच्छा है, हालांकि अभी भी एकवचन है।

    # assume that idToUser is a dictionary mapping IDs to user objects 
    
    user = idToUser['0001a'] 
    print user.name 
    
  3. सूचियाँ: उदाहरण के लिए: अंत में, आप सूचियों, जो एक पूरी तरह से अलग विचार हैं। ये लगभग हमेशा बहुवचन होना चाहिए, क्योंकि वे अन्य इकाइयों का संग्रह सरल हैं।उदाहरण के लिए:

    users = [userA, userB, userC] # makes sense 
    for user in users: 
        print user.name   # especially later, in iteration 
    

मुझे यकीन है कि कुछ अस्पष्ट या अन्यथा संभावना नहीं परिस्थितियों के लिए कुछ अपवादों को छोड़कर यहां किए जाने के लिए कॉल कर सकते हैं देखते हैं, लेकिन मुझे लगता है कि यह एक बहुत मजबूत दिशानिर्देश जब पालन करने के लिए है शब्दकोष और सूचियों का नामकरण, न केवल पायथन में बल्कि सभी भाषाओं में।

+0

मेरे प्रश्न में उदाहरण (2) के अंतर्गत आता है। पूरा नाम तब 'रिकॉर्ड टूसोर्सफाइल' है। मैं देख सकता हूं कि यह कितना स्पष्ट है। क्या आप कभी इस तरह के मामले में एक शॉर्टेंड 'स्रोत 'या' स्रोत 'का उपयोग करेंगे? – max

+0

मैं इस तरह के मामले में 'स्रोत' का उपयोग करके अपना स्वयं देख सकता था, लेकिन केवल तभी उदाहरण विशेष रूप से अच्छी तरह से प्रलेखित या उत्तेजित रूप से स्पष्ट था। शॉर्टंड महान है, लेकिन अस्पष्ट होना नहीं है। :) –

6

यह बहुवचन होना चाहिए क्योंकि तब प्रोग्राम व्यवहार करता है जैसे आप इसे बड़े पैमाने पर पढ़ते हैं। कारण है कि यह विलक्षण (पूरी तरह से काल्पनिक उदाहरण) नहीं होना चाहिए मैं आपको दिखा करते हैं:

c = Customer(name = "Tony") 
c.persist() 

[...] 

# 
# 500 LOC later, you retrieve the customer list as a mapping from 
# customer ID to Customer instance. 
# 

# Singular 
customer = fetchCustomerList() 
nameOfFirstCustomer = customer[0].name 
for c in customer: # obviously it's totally confusing once you iterate 
    ... 

# Plural 
customers = fetchCustomerList() 
nameOfFirstCustomer = customers[0].name  
for customer in customers: # yeah, that makes sense!! 
    ... 

इसके अलावा, कभी कभी यह एक अच्छा विचार है और भी अधिक स्पष्ट नाम है जिसमें से आप मानचित्रण (शब्दकोशों के लिए) का अनुमान लगा सकते हैं और शायद प्रकार। जब मैं एक शब्दकोश परिवर्तनीय परिचय देता हूं तो आमतौर पर मैं एक साधारण टिप्पणी जोड़ता हूं। एक उदाहरण:

# Customer ID => Customer 
idToCustomer = {} 

[...] 

idToCustomer[1] = Customer(name = "Tony") 
+0

यदि आपने शब्दकोश के लिए अधिक स्पष्ट नाम 'idToCustomer' का उपयोग नहीं करना चुना है, तो क्या आप बहुवचन' ग्राहकों 'का उपयोग करेंगे? – max

+0

@ मैक्स: निश्चित रूप से, यह बहुत अधिक समझ में आता है - क्योंकि मैंने अपने पहले उदाहरणों के साथ व्याख्या करने की कोशिश की। – AndiDog

5

मैं कंटेनरों के लिए बहुवचन पसंद करता हूं। वहाँ का उपयोग करने में सिर्फ एक निश्चित समझ में आता तर्क है:

entries = [] 
for entry in entries: 
    #Code... 
संबंधित मुद्दे