技术问询:实现两值至少其一存在且非空检查,现有方案不够Pythonic
更Pythonic的方式检查两个值至少一个非空有效
嘿,完全理解你想摆脱冗长的条件判断,用更符合Python风格的写法来实现这个需求!先给你看几种优雅的方案,再对比一下常见的非Pythonic写法,帮你理清思路。
核心思路:利用Python内置的any()函数
Python里的any()函数天生就是用来判断可迭代对象中是否至少有一个元素为真,完美契合你的需求。我们只需要定义清楚“存在且不为空”的判断标准,就能用它快速实现逻辑。
方案1:判断值为「非假值」(通用场景)
如果你的“不为空”指的是排除所有Python默认的假值(None、空字符串''、空列表[]、0、False等),直接用any()就行:
# 直接写表达式,甚至不用封装函数 result = any((value1, value2))
比如:
any((None, "hello"))→Trueany(([], ""))→Falseany((0, "test"))→True(注意:如果0对你来说是有效值,这个方案就不适用)
方案2:自定义“有效”规则(灵活场景)
如果你的需求是排除None和空字符串,但保留0、False等其他值,可以结合生成器表达式自定义判断条件:
def at_least_one_valid(val1, val2): return any(x is not None and x != "" for x in (val1, val2))
测试例子:
at_least_one_valid(0, "")→True(0被视为有效)at_least_one_valid(None, "")→Falseat_least_one_valid("hello", None)→True
对比:非Pythonic的常见写法
之前你可能写过类似这样的冗长代码:
# 不够优雅的写法示例 def check_values(a, b): if a is not None and a != "": return True elif b is not None and b != "": return True else: return False
这种写法逻辑没问题,但重复的条件判断显得啰嗦,而用any()的写法更简洁,可读性也更高,完全符合Python“简洁优雅”的风格。
额外提示
如果需要检查更多值(不止两个),any()同样适用,只需要把所有值放进元组或列表里就行:
any((val1, val2, val3, val4))
希望这些方案能帮到你,Pythonic的核心就是善用内置工具,用最少的代码清晰表达逻辑~
内容的提问来源于stack exchange,提问作者jenks
相关产品推荐
相关产品推荐

