it-swarm-vi.tech

'id' là tên biến xấu trong Python

Tại sao việc đặt tên một biến id trong Python là không tốt?

117
brian buck

id() là một tích hợp cơ bản:

Trợ giúp về chức năng tích hợp id trong mô-đun __builtin__:

id(...)

    id(object) -> integer

    Return the identity of an object.  This is guaranteed to be unique among
    simultaneously existing objects.  (Hint: it's the object's memory
    address.)

Nói chung, sử dụng các tên biến mà Eclipse là một từ khóa hoặc hàm tích hợp trong bất kỳ ngôn ngữ nào là một ý tưởng tồi, ngay cả khi nó được cho phép.

120
Kevin Little

id là một hàm tích hợp cung cấp địa chỉ bộ nhớ của một đối tượng. Nếu bạn đặt tên cho một trong các chức năng của mình id, bạn sẽ phải nói __builtins__.id để có được bản gốc. Đổi tên id trên toàn cầu gây nhầm lẫn trong bất cứ điều gì ngoại trừ một tập lệnh nhỏ.

Tuy nhiên, việc sử dụng lại tên tích hợp làm biến không phải là điều tồi tệ miễn là việc sử dụng là cục bộ. Python có lot các hàm dựng sẵn mà (1) có tên chung và (2) dù sao bạn cũng sẽ không sử dụng nhiều. các thành viên của một đối tượng đều ổn vì rõ ràng từ ngữ cảnh bạn đang làm:

Thí dụ:

def numbered(filename):
  file = open(filename)
  for i,input in enumerate(file):
    print "%s:\t%s" % (i,input)
  file.close()

Một số tích hợp với tên hấp dẫn:

  • id
  • file
  • list
  • map
  • all, any
  • complex
  • dir
  • input
  • slice
  • buffer
48

Trong PEP 8 - Hướng dẫn kiểu cho Python Code , hướng dẫn sau xuất hiện trong phần Mô tả: Kiểu đặt tên :

  • single_trailing_underscore_: Được sử dụng theo quy ước để tránh xung đột với Python từ khóa, ví dụ:.

    Tkinter.Toplevel(master, class_='ClassName')

Vì vậy, để trả lời câu hỏi, một ví dụ áp dụng hướng dẫn này là:

id_ = 42

Việc bao gồm dấu gạch dưới trong tên biến làm cho ý định rõ ràng (với những người quen thuộc với hướng dẫn trong PEP 8).

44
DavidRR

Tôi có thể nói một cái gì đó không phổ biến ở đây: id() là một hàm tích hợp khá chuyên dụng hiếm khi được sử dụng trong logic nghiệp vụ. Do đó, tôi không thấy vấn đề gì khi sử dụng nó làm tên biến trong hàm chặt chẽ và được viết tốt, trong đó rõ ràng id không có nghĩa là hàm tích hợp.

41
Sebastian Rittau

Thật tệ khi đặt tên cho bất kỳ biến nào sau hàm tích hợp. Một trong những lý do là bởi vì nó có thể gây nhầm lẫn cho người đọc không biết tên bị ghi đè.

4
Toni Ruža

'id' là một phương thức tích hợp trong Python. Việc gán giá trị cho 'id' sẽ ghi đè lên phương thức. Tốt nhất là sử dụng một mã định danh trước như trong "some_id" hoặc sử dụng nó trong một phương thức viết hoa khác.

Phương thức dựng sẵn lấy một tham số duy nhất và trả về một số nguyên cho địa chỉ bộ nhớ của đối tượng mà bạn đã truyền.

>>>id (1)

9787760

>>>x = 1

>>>id (x)

9787760

1
brian buck

Bởi vì đó là tên của hàm dựng sẵn.

1
ahockley