Cho rằng các cuộc thảo luận trước đó dường như đã chứng minh rằng một trong các biến có thể là None
, một cách tiếp cận sẽ được (giả sử bạn muốn thiết lập object.updated_date
khi một trong hai biến là None
):
if None in (past, object.updated_date) or object.updated_date >= past:
object.updated_date = now
điểm là kiểm tra None in (past, object.updated_date)
có thể là thủ công hơn thay thế ngữ nghĩa tương đương (past is None or object.update_date is None)
(được cho là một epsilon dễ đọc hơn nhờ độ nén tốt hơn của nó, nhưng nó là, tất nhiên, một vấn đề có thể tranh cãi về phong cách).
Là một vấn đề không thể biện hộ được ;-), tôi khuyên bạn nên chống lại việc sử dụng tên được đặt sẵn làm tên cho các biến của riêng bạn (và chức năng, v.v.) - object
trong tên trong ngữ cảnh này rõ ràng đang được sử dụng cho mục đích của riêng bạn. Sử dụng obj
thay vào đó là ngắn gọn hơn, vẫn có thể đọc được (cho là nhiều hơn ;-), và không có nhược điểm. Bạn sẽ không bị "cắn" trong bất kỳ trường hợp nào bằng cách thực hành "shadowing" được xây dựng với tên của riêng bạn, nhưng cuối cùng nó sẽ xảy ra (khi bạn cần ý nghĩa bình thường của tên bóng tối trong một số sau này hoạt động bảo trì bình thường) và bạn có thể ở trong một tình huống gỡ rối khó hiểu sau đó; trong khi đó, bạn có nguy cơ gây nhầm lẫn cho người đọc/người duy trì khác ... và đang hoàn toàn không có lợi thế để đổi lấy những nhược điểm này.
Tôi nhận ra rằng nhiều tên Python của built-in là một "phiền toái hấp dẫn" theo nghĩa này ... file
, object
, list
, dict
, set
, min
, max
...tất cả các tên rõ ràng hấp dẫn cho "một tập tin", "một đối tượng", "một danh sách`, vv Nhưng, nó là đáng giá để tìm hiểu để chống lại sự cám dỗ đặc biệt này! -)
Nguồn
2010-07-03 16:50:34
Không có cách nào mà bạn có thể nhận được lỗi đó trên dòng đó nếu cả hai là trường hợp của 'datetime.datetime'. –