2011-08-08 26 views
8

cách pythonic nhất để khắc phục sự cố sau đây là gì? Từ vỏ tương tác:Hầu hết các cách thức phân biệt đối số từ khóa bằng cách sử dụng một biến làm từ khóa?

>>> def f(a=False): 
...  if a: 
...   return 'a was True' 
...  return 'a was False' 
... 
>>> f(a=True) 
'a was True' 
>>> kw = 'a' 
>>> val = True 
>>> f(kw=val) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: f() got an unexpected keyword argument 'kw' 

Đối với thời điểm tôi nhận được xung quanh nó như sau:

>>> exec 'result = f(%s=val)' % kw 
>>> result 
'a was True' 

nhưng nó có vẻ khá vụng về ...

(Hoặc python 2.7+ hoặc 3.2+ giải pháp là ok)

Trả lời

4

Trong nhiều trường hợp bạn chỉ có thể sử dụng

f(kw) 

như các đối số từ khóa không cần phải được quy định như từ khóa, nếu bạn chỉ định tất cả các đối trước mặt họ.

Python 3 có cú pháp cho keyword only arguments, nhưng đó không phải là những gì theo mặc định.

Hoặc, xây dựng trên câu trả lời @ zeekay của,

kw = 'a' 
f(**{kw: True}) 

nếu bạn không muốn để lưu trữ kw như một dict, ví dụ nếu bạn cũng đang sử dụng nó như là một chìa khóa trong một tra cứu từ điển ở nơi khác.

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