【问题标题】:Check if condition matches multiple variables检查条件是否匹配多个变量
【发布时间】:2014-03-05 11:40:15
【问题描述】:

我有一个方法/函数,它传递了几个可能具有 None 值的变量。如何检查所有变量的 None 值并以最 Pythonic 的方式将其替换为字符串?

示例代码:

def logData(self, var1=None, var2=None, var3=None):
    if var1 is None:
         var1 = "---"
    if var2 is None:
         var2 = "---"
    if var3 is None:
         var3 = "---"

    # what I would prefer / pseudo code:
    if list(var1, var2, var3) is None:
         list[1] = "---"

【问题讨论】:

    标签: python python-2.7 conditional


    【解决方案1】:
    var1, var2, var3 = (a or '---' for a in [var1, var2, var3])
    

    【讨论】:

    • @markrages 这个检查通常在 vars 是 mutabe 时添加,我认为对于整数不需要它......但是是的,这样我无法处理 0,条件应该更改为类似于 superjump回答
    • 我是这个方法的新手,你能具体解释一下每个步骤的作用吗?
    • @DominicM a or '---' 的含义:stackoverflow.com/questions/2580136/…。 Remains 是元组解包和列表理解
    【解决方案2】:

    使用元组解包:

    var1, var2, var3 = ['---' if (x is None) else x for x in (var1, var2, var3)]
    

    【讨论】:

    • 对我来说似乎很复杂,你能解释一下吗?
    • @DominicM 下面是一个简单的元组解包示例:# 将 var1 设置为 1,var2 设置为 2,var3 设置为 3 var1, var2, var3 = 1, 2, 3 # 现在假设你的函数被调用带有参数 # var1 == 0, var2 == None 和 var3 = 5,下面的列表理解:
    • @DominicM。哎呀,还没来得及发表评论。我想说的是,答案中的列表 comp 遍历传递给您的函数的值 (var1, var2, var3),如果其中任何一个是 None,则将它们替换为“---”,否则它们保持不变。此外,列表 comp 评估为三个值,这些值依次分配给左侧的变量名,在本例中为 var1、var2、var3。
    • 在答案中添加更多信息时,编辑答案可能更合适。
    【解决方案3】:

    您可以使用**kwargs

    def logData(self, **kwargs):
      for key,value in kwargs.iteritems():
        if value is None:
          # do assignment ...
    

    【讨论】:

    • 你会以同样的方式调用函数,单独传递参数吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    相关资源
    最近更新 更多