这是 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 许可协议
在 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
显式或隐式地在if
或while
就此而言)。一个值得注意的例外:numpy 数组对象不会转换为 bool(它们会引发异常)。它们需要使用诸如
(arr!=0).any()
或(arr>0).all()
之类的结构进行显式转换类似的话:不要养成写任何的习惯
与 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,这将无法通过“为真”测试,但在其他方面表现得非常像真。