代码之家  ›  专栏  ›  技术社区  ›  thomas.mac

如何检查kwarg是否等于特定值

  •  0
  • thomas.mac  · 技术社区  · 7 年前

    我有以下功能:

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

    但当我调用下面的函数时,什么都没有发生:

      find_data(data='price')
    

    我的预期输出是让函数在数据=价格时执行操作(例如,对于数据=关闭)。我想知道是否还有一种更像蟒蛇的、更短的方法:

    def find_data(**data): 
        for k, v in data.items():
            if v == 'price':
                 print 'yes'
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   zxq9    7 年前

    您想将kwargs作为字典引用。

    习惯用法:

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

    作为附录。。。请记住,您对函数中的参数了解得越多,代码随时间增长的趋势就越不疯狂(也就是说,您参与的多态性和变量越少,代码的语义就越清晰)。因此,仔细考虑是否真的需要传递“一些随机关键字参数”,或者是否应该接收特定形状的词典,这是一件好事 或者可能将该特定值作为其自身的显式参数。

        2
  •  1
  •   Jean-François Fabre    7 年前

    你把关键字参数和参数字典搞混了。

    在里面 find_data , data 是关键字参数的字典(通常称为ill-named kwargs 数据 到字符串不起作用(类型不同)。您需要:

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