这是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
布尔表达式的作用,而不是整数或数组之类的变量。
用python编写
if var:
与写作具有相同的效果
if bool(var):
(哪里bool
是内置bool
类型,它也可以作为bool对象的构造函数)。
如果该值已经是布尔值(值为True或False),则含义很清楚-bool(var)返回相同的值。对于其他类型,几乎总是有转换为bool可用的转换,具体取决于类型。对于整数(如C语言),它与var!= 0相同;对于列表,字典或字符串,它与len(var)!= 0相同,依此类推。您可以在python文档中找到它。
当定义自己的类时,您可以通过定义一个方法def __nonzero__(self):
,该方法将在此上下文中被调用(当您的对象被bool
显式传递或隐式传递给if
-或while
为此)。
一个值得注意的例外:numpy数组对象不会转换为bool(它们会引发异常)。它们需要使用类似(arr!=0).any()
或的结构进行显式转换(arr>0).all()
在类似的方面:不要养成写任何
if x == True: # This only works as expected when x is a bool
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是布尔对象,则表示true,根本没有其他对象”,这很有用,但对于您测试真值时的情况来说太狭窄了。某人可能最终通过1,这将使“ is True”测试失败,但在其他方面的行为与True非常相似。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句