我有以下功能:
def find_data(**data):
if data == 'price':
## do something
print 'yes'
但是当我打电话给下面的功能时,没有任何事情发生:
find_data(data='price')
我的预期输出是让函数在data = price时执行操作(例如,data = close)。我想知道是否有更多的pythonic,更短的方式:
def find_data(**data):
for k, v in data.items():
if v == 'price':
print 'yes'
答案 0 :(得分:2)
您想将kwargs引用为字典。
地道:
def find_data(**kwargs):
if kwargs['data'] == 'price':
## do something
print 'yes'
作为附录...记住,你对函数中的参数知之甚少,你的代码随着时间的推移会越来越疯狂(也就是说,多态性和变量主义你更清楚地使用你的代码的语义会随着时间的推移而变得越来越明显。因此,仔细考虑是否真的需要传入"只是一些随机关键词args"或者,如果您应该接收特定形状的字典作为单个参数,或者可能将该特定值作为其自身的显式参数接收。
答案 1 :(得分:1)
您将关键字参数与参数字典混合在一起。
在find_data
中,data
是关键字参数的字典(名称不详,因为它通常称为kwargs
)。将data
与字符串进行比较并不起作用(不是相同的类型)。你想要:
def find_data(**data):
if data["data"] == 'price':
## do something
print('yes')
find_data(data="price")