Python:如何在得到第一个fal时链接boolean测试以获得False

2024-10-03 21:26:14 发布

您现在位置:Python中文网/ 问答频道 /正文

在尝试减少嵌套的ifs(以及一个停止工作的脚本)时遇到了很多麻烦之后,我意识到也许我对python中布尔值的工作原理和工作原理有错误的认识。在

我有这个(工作正常,但扭曲):

if (not gotside):
    if (j > 1):
        if (j < a.shape[1] - 1):
            if a[i, j+unit]:
                print "only now I do stuff!"

并尝试了这个方法(因为没有按预期工作而显得很拘束):

^{pr2}$

然后我试着用“or”代替“and”,但是没用,因为(后来我发现)当你使用x and y甚至x or y时,你得到的是{},而不是{}。在

所以,我不知道如何才能一个接一个地进行一些测试(最好是在同一行中,使用布尔运算符),这样当第一个测试的结果为False时,整个表达式就会返回False。在

谢谢你的阅读!在


Tags: orand脚本falseonlyif错误not
3条回答

你的例子应该有用。在

if x and y and z:
    ...

只有当x、y和z的求值结果都不为False,并且在Python中,and短路时才会发生,因此一旦一个项目失败,就会返回False值。我们可以很容易地展示这一点:

^{pr2}$

我明白您的顾虑,但请记住,每当Python中的if语句中有某个内容,它将隐式转换为bool作为条件。因此,当3 or 2返回3和{}在独立完成时返回{},而说{}实际上相当于说{},因此无论布尔逻辑在其他上下文中返回什么,您都将获得条件中使用时逻辑返回的值的假或真值。在

是的,我同意其他人的说法,你的例子应该按照你的意愿运作。你说得对,x or y返回x,y中的一个,但是这个对象可以被求值为True或False。{python如何计算[]或{}等)将返回False。如果python真的尝试了这个测试,那么这个测试会引发一个错误。在

x = 1; y = 2
if x < y and x == y and d['a']: # d doesn't exist
    print 'This will never be printed'

如果您的代码没有按预期工作,请详细说明您期望它做什么,以及它实际在做什么。在

相关问题 更多 >