2012-02-08 24 views
15

Khi đặt tên cho một container, một phong cách mã hóa tốt hơn là những gì:số nhận dạng số ít hoặc số nhiều cho từ điển?

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

hoặc

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

Số nhiều lần đọc tự nhiên hơn ở sự sáng tạo; số ít tại nhiệm vụ.

Và nó không phải là một câu hỏi nhàn rỗi; Tôi đã bắt gặp bản thân mình bị lẫn lộn trong một mã cũ khi tôi không chắc chắn nếu một biến là một container hoặc một giá trị duy nhất.

CẬP NHẬT

Dường như có một thỏa thuận chung rằng khi từ điển được sử dụng như một ánh xạ, nó tốt hơn để sử dụng một tên chi tiết hơn (ví dụ, recordToSourceFilename); và nếu tôi hoàn toàn muốn sử dụng tên viết tắt, thì hãy làm cho số nhiều (ví dụ: sources).

+3

Tôi chủ yếu sử dụng các dạng số nhiều cho các thùng chứa, nhưng tôi quyết định theo từng trường hợp cụ thể. Nếu bạn bị nhầm lẫn với một dạng số ít, có lẽ đó là một gợi ý. –

+1

@SvenMarnach: Vui lòng đăng câu trả lời của bạn dưới dạng câu trả lời. –

Trả lời

11

Tôi nghĩ rằng có hai trường hợp sử dụng rất cụ thể với từ điển cần được xác định riêng biệt. Tuy nhiên, trước khi giải quyết chúng, cần lưu ý rằng tên biến cho từ điển hầu như luôn luôn là số ít, trong khi danh sách hầu như luôn luôn là số nhiều.

  1. điển như những thực thể đối tượng như: Có những lần khi bạn có một cuốn từ điển mà đại diện cho một số loại cấu trúc dữ liệu đối tượng như thế nào. Trong những trường hợp này, từ điển hầu như luôn đề cập đến một cấu trúc dữ liệu giống như đối tượng duy nhất và do đó sẽ là số ít. Ví dụ:

    # 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. điển như những thực thể lập bản đồ: lần khác, từ điển của bạn có thể hành xử giống như một hash-bản đồ điển hình. Trong trường hợp này, tốt nhất nên sử dụng một tên trực tiếp hơn, mặc dù vẫn là số ít. Ví dụ:

    # assume that idToUser is a dictionary mapping IDs to user objects 
    
    user = idToUser['0001a'] 
    print user.name 
    
  3. Danh sách: Cuối cùng, bạn có danh sách, đó là một ý tưởng hoàn toàn riêng biệt. Chúng hầu như luôn luôn là số nhiều, bởi vì chúng đơn giản là một tập hợp các thực thể khác.Ví dụ:

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

Tôi chắc chắn rằng có một số tình huống khó hiểu hoặc không chắc rằng có thể gọi cho một số trường hợp ngoại lệ được thực hiện ở đây, nhưng tôi cảm thấy rằng đây là một phương châm khá mạnh để làm theo khi đặt tên từ điển và danh sách, không chỉ bằng Python mà bằng tất cả ngôn ngữ.

+0

Ví dụ trong câu hỏi của tôi thuộc (2). Tên đầy đủ là 'recordToSourceFile'. Tôi có thể thấy nó rất rõ ràng. Bạn có bao giờ sử dụng thuật ngữ 'nguồn' hoặc' nguồn' trong trường hợp này không? – max

+0

Tôi có thể thấy bản thân mình bằng cách sử dụng 'nguồn 'trong trường hợp này, nhưng chỉ khi cá thể được ghi chép rõ ràng hoặc rõ ràng. Viết tắt là rất tốt, nhưng mơ hồ thì không. :) –

6

Nó phải là số nhiều bởi vì sau đó chương trình hoạt động giống như bạn đọc to. Hãy để tôi chỉ cho bạn biết tại sao nó không phải là số ít (hoàn toàn giả tạo chẳng hạn):

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!! 
    ... 

Hơn nữa, đôi khi nó là một ý tưởng tốt để có thậm chí tên rõ ràng hơn từ đó bạn có thể suy ra các bản đồ (đối với từ điển) và có lẽ là kiểu. Tôi thường thêm một bình luận đơn giản khi tôi giới thiệu một biến từ điển. Ví dụ:

# Customer ID => Customer 
idToCustomer = {} 

[...] 

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

Nếu bạn chọn không sử dụng tên 'idToCustomer' rõ ràng hơn cho từ điển, bạn có sử dụng' khách hàng' số nhiều không? – max

+0

@max: Chắc chắn, nó chỉ có ý nghĩa hơn nhiều - như tôi đã cố gắng giải thích với các ví dụ đầu tiên của mình. – AndiDog

5

Tôi thích số nhiều cho các thùng chứa. Chỉ có một logic dễ hiểu nhất khi sử dụng:

entries = [] 
for entry in entries: 
    #Code... 
Các vấn đề liên quan