2012-01-04 28 views
5

Tôi thường đấu tranh với cú pháp if/else và tôi hy vọng một số người có thể cho tôi một số ý kiến ​​của họ về những gì họ nghĩ là rõ ràng hơn hoặc nếu điều này vi phạm bất kỳ Pythonism nào (Tôi đã tìm kiếm và không thể tìm thấy bất kỳ thứ gì).Python Nếu sau đó khác phong cách khi nhận các giá trị từ Dicts

Có phải một trong số này tốt hơn và đúng hay sai?

value = None 
if 'value' in some_dict: 
    value = some_dict['value'] 

some_func(value=value) 

OR:

if 'value' in some_dict: 
    value = some_dict['value'] 
else: 
    value = None 

some_func(value=value) 

OR:

some_func(value=some_dict.get('value', None)) 

tôi có thể thấy lý do cho tất cả.

Trả lời

8

Tất nhiên trường hợp cuối cùng là trường hợp mô tả tốt nhất là trường hợp chính xác cho dict.get.

Chỉ cần một lưu ý - Tham số thứ hai để get là không cần thiết, bạn chỉ có thể viết:

some_func(value=some_dict.get('value')) 
1

này trông tự nhiên nhất đối với tôi:

value = some_dict.get('value') 
some_func(value=value) 

Hoặc: trường hợp cuối cùng. Câu hỏi đã được chỉnh sửa trong khi tôi trả lời.

1

Sử dụng phương pháp get() của dict trong ví dụ thứ ba của bạn. Đó là trường hợp sử dụng là chính xác những gì nó có fore.

0

này chỉ là vấn đề của phong cách, tôi sẽ sử dụng cuối cùng chỉ vì nó succint hơn (và nhận thấy bạn có thể bỏ qua None vì nó là mặc định)

btw có cũng này:

value = some_dict['value'] if 'value' in some_dict else None 

nhưng đó chính xác là những gì .get() không

0

Như những người khác đã nói, phương pháp dict.get() dường như phù hợp hơn với những gì bạn cần.

NHƯNG, nếu bạn không muốn để khởi động phương pháp này nếu giá trị không phải là trong dictionnary, một cách pythonic (theo EAFP principle) sẽ là:

try: 
    some_func(some_dict['value']) 
except KeyError: 
    pass 
Các vấn đề liên quan