2012-06-15 45 views
13

Từ vỏ ipython của tôi, tôi thấy một phương thức setdefault trong os.environ nhưng nó không được ghi lại. http://docs.python.org/library/os.html#os.environ. Có phải nó được ghi lại ở một nơi khác?Sử dụng os.environ.setdefault có an toàn không?

def setdefault(self, key, failobj=None): 
    if key not in self: 
     self[key] = failobj 
    return self[key] 

Tôi có thể sử dụng chức năng này hoặc viết trình bao bọc cho các dòng đó không?

+0

Có phương thức 'dict.setdefault' tương tự với cùng chức năng. – eumiro

Trả lời

16

Các os.environ documentation không rõ đó là một ánh xạ:

Một đối tượng lập bản đồ đại diện cho môi trường chuỗi.

Vì vậy, nó hoạt động theo trăn mapping documentation trong đó dict là cách triển khai chuẩn.

os.environ do hoạt động giống như các dict tiêu chuẩn, nó có tất cả các phương pháp giống nhau:

>>> import os 
>>> len(os.environ) 
36 
>>> 'USER' in os.environ 
True 
>>> os.environ.fromkeys 
<bound method classobj.fromkeys of <class os._Environ at 0x107096ce8>> 

Các .setdefault method là tài liệu trên cùng một trang như phần còn lại của các phương pháp lập bản đồ, và bạn có thể sử dụng nó chỉ tốt như vậy.

4

Để làm rõ --- Tôi phải suy nghĩ một chút về câu hỏi và câu trả lời này có ý nghĩa gì --- tài liệu Python.org trên os.environ không bận tâm đến tất cả các phương pháp tích hợp sẵn đối với các loại ánh xạ (chẳng hạn như os.environ, cơ bản là từ điển mà các phương thức bổ sung đã được đưa ra). Thay vào đó, họ chủ yếu đề cập đến các phương pháp bổ sung mà họ đã đưa ra cho một đối tượng trong os, được đặt tên môi trường và có nguồn gốc từ loại dict, vượt ra ngoài những dict đã được tích hợp sẵn từ một cuốn sách mà tôi có trên Python, bản tóm tắt. đối với bất kỳ loại từ điển nào là dict.setdefault (khóa, mặc định = Không), và giải thích là nó tương tự như get() nhưng nó đặt dict [key] = mặc định nếu khóa chưa có trong dict.

mặc định có lẽ không được chọn làm tên ở đây vì dễ nhầm lẫn với somevariablename = defaultvalue, cách thông thường để khai báo giá trị mặc định trong khai báo hàm. Đó là, mặc dù mặc định = None chắc chắn thiết lập một mặc định, nó không rõ ràng làm thế nào setdefault trong bất kỳ ý nghĩa về cơ bản thiết lập một mặc định, như mặc định có thể được đưa ra bất kỳ giá trị.

Các vấn đề liên quan