2012-02-08 5 views
15

컨테이너의 이름을 지정할 때 더 나은 코딩 스타일 무엇 :사전에 대한 단수 또는 복수 식별자?

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

또는

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

복수형을 만들 때 더 자연스러운 읽고; 배정 된 단수.

그리고 유휴 질문이 아닙니다. 변수가 컨테이너인지 단일 값인지 확실하지 않으면 이전 코드에서 혼란스러워졌습니다.

UPDATE

사전이 매핑로 사용하는 경우, 그것은 더 자세한 이름을 사용하는 것이 좋습니다 것이 일반적인 합의가있을 것 (예를 들어, 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)에 해당합니다. 전체 이름은'recordToSourceFile'입니다. 나는 그것이 매우 명백한 것을 볼 수있다. 이런 경우에'source'또는'sources'를 짧게 사용 하시겠습니까? – 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'를 사전에 사용하지 않기로 결정했다면, 복수의'customers'를 사용하겠습니까? – max

+0

@max : 확실히, 그것은 훨씬 더 의미가 있습니다. 첫 번째 예제로 설명하려고 했으므로. – AndiDog

5

나는 컨테이너에 대한 복수형을 선호합니다.

entries = [] 
for entry in entries: 
    #Code... 
관련 문제