微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python或其他语言中它究竟是什么意思“if var”

这是 python中用于验证日期条目的算法.我想知道这究竟是什么意思“if day”(语义).我只知道“if”对布尔表达式的影响,而不是整数或数组等变量(我见过一些).有人有解释吗?

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

解决方法

在python中,写作

如果var:

与写作具有相同的效果

如果bool(var):

(其中bool是内置的bool类型,它也可以作为bool对象的构造函数).

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

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

一个值得注意的例外: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

应该始终与无比较

如果x为None:
(要么)
如果x不是None:

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

同样,如果x为True,则表示“如果x是布尔对象,意思是真的,而根本没有其他对象” – 这可能很有用,但对于刚刚测试真值时的情况来说太窄了.有人可能最终传递1,这将失败’是真’测试,但其他行为非常像真.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐