“if var”在 python 中是什么意思?

新手上路,请多包涵

这是 python 中的一个函数,用于验证日期条目。

 def valid_day(day):
    if day and day.isdigit():#if day
        day = int(day)
        if day > 0 and day <= 31:
            return day

我想知道表达式 if day 是什么意思(就语义而言)。

我只知道 if 对布尔表达式的影响,而不是对整数或数组等变量的影响。

原文由 Alcides 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 576
2 个回答

在 python 中,写作

if var:

和写一样的效果

if bool(var):

(其中 bool 是内置的 bool 类型,它也充当 bool 对象的构造函数)。

如果该值已经是 bool(值为 True 或 False),则含义很明确——bool(var) 返回相同的值。对于其他类型,几乎总是可以转换为 bool avaliable,这取决于类型。对于整数(如在 C 中),它与 var!=0 相同;对于列表或字典或字符串,它与 len(var)!=0 等同。你可以在 python 文档中找到它。

当您定义自己的类时,您可以通过 def __nonzero__(self): 定义一个方法,该方法将在此上下文中调用(当您的对象被传递给 bool 显式或隐式地在 ifwhile 就此而言)。

一个值得注意的例外:numpy 数组对象不会转换为 bool(它们会引发异常)。它们需要使用诸如 (arr!=0).any()(arr>0).all() 之类的结构进行显式转换

类似的话:不要养成写任何的习惯

if x == True:     # This only works as expected when x is a bool, or 0, or 1
if x is True:     # Can be useful but you need to understand what it really means.
if x == None:     # Often works as expected, except when it doesn't

与 None 的比较应始终与

if x is None: (或) if x is not None:

只有一个 None 对象,而 x is None 会告诉你 x 是否引用该对象,并且总是会给你一个布尔值(如果是,则为 True,对于任何其他对象为 False)。比较 x==None (我在开始使用 Python 时经常犯的一个错误)通常会起作用,但它会激活 Python 的通用比较机制,这可能不是你想要的;如果 x 是一个类的实例,则比较可能会引发异常。 is 简单快捷,只需进行身份测试 - 它不能过载。

同样 if x is True 意思是“如果 x 是布尔对象,意思是真的,根本没有其他对象”——这可能很有用,但对于你只是测试真值的情况来说太窄了。有人可能最终通过了 1,这将无法通过“为真”测试,但在其他方面表现得非常像真。

原文由 greggo 发布,翻译遵循 CC BY-SA 4.0 许可协议

行为因语言而异。

行为 1: 变量被转换为布尔值。即存在从不同类型到布尔值的语言特定转换。对于数值, 0 通常转换为 false 而任何其他值都转换为 true 。据我所知,Python 就是这样做的。

行为 2: 布尔值是数值。如上所述, 0 通常是唯一计算为 false 的值

行为 3: 任何非空引用的计算结果为 true ,空引用的计算结果为 false

这应该或多或少地涵盖了它,但也可能有其他变体或组合,例如,如果 1 不可用,则使用回退到方法 2 或 3。关键是这是一个非常特定于语言的问题。

原文由 Henrik 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题