2017-10-14 96 views
0

我有以下功能:如何检查是否kwarg等于一个特定值

def find_data(**data): 
    if data == 'price': 
     ## do something 
     print 'yes' 

但是当我打电话下面没有任何的功能发生了:

find_data(data='price') 

我的预期输出当数据=价格时(例如,对于数据=关闭),使该功能执行操作。我想知道是否有更pythonic,更短的方式然后:

def find_data(**data): 
    for k, v in data.items(): 
     if v == 'price': 
      print 'yes' 
+0

'如果数据[“数据”] ==“价格”'会工作 –

+0

这是否被认为是标准做法? (谢谢,我喜欢它的简洁) –

+2

@ thomas.mac成语(标准练习)是将变量命名为kwargs'kwargs',然后将其用作字典。这是它的目的。 – zxq9

回答

2

你想引用kwargs作为一个字典。

地道:

​​

作为增编...这是好事,记住,你越了解进入一个功能少狂发的参数你的代码往往会随着时间的推移增长(也就是说,越少代码的多态性和可变性越清晰,代码的语义也会随着时间的推移而变化)。因此,仔细考虑是否真的需要传递“只是一些随机关键字参数”,或者您应该接受一个特定形状的字典作为单个参数或者可能接收该特定值作为显式自己的论点。

1

你在混合关键字参数与参数字典。

find_data,data是关键字参数字典(不正确的名称,因为它通常被称为kwargs)。比较data到一个字符串不起作用(不是相同的类型)。你想:

def find_data(**data): 
    if data["data"] == 'price': 
     ## do something 
     print('yes') 

find_data(data="price") 
+0

为什么downvote ?没有正确解释? –

+0

是的,我不知道downvote - 因为从技术上讲你是对的。但是可能再次,也许它是因为Python中的一些变量按照惯例具有标准名称,比如'self','args'和'kwargs'。 ? – zxq9

+0

是的,我解释了混乱。我的解释可能很笨拙。 downvote来自蟒蛇DV警察:hi-rep用户回答“微不足道”的问题并不完美,因为它应该。好吧,请给他们看。 –

相关问题