if语句的默认大小写(如果未指定)

2024-06-26 14:06:02 发布

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

我的控制声明如下:

        if x < 0 or x >= ht or y < 0 or y >= wdt: 
            im_warped[i][j] = 0
        else:
            im_warped[i][j] = im[x][y] 

结果如下:

        if 0 < x < ht and 0 < y < wdt:
            im_warped[i][j] = im[x][y]

我没有为第二个控制语句指定else case,即使我确信这样的值(超出了界限)确实存在。那么这里到底发生了什么?它们是否自动被赋值为零/空值(我认为这不太可能)


Tags: orand声明if语句elseht空值
2条回答

if语句有块,而不是值。你好像把这和ternary operator搞混了。例如,在表中,如果你写

 if condition then
       x
 else 
      y
 end

condition为true时,整个语句的值将被计算为x。如果你写信

z = if condition then x else y end

然后每当condition为真时,表达式if condition then x else y将被计算为x,因此x将被分配给z。你知道吗

但是,在Python中

if condition then:
      x

Python期望x不是,而是指令。在第一个示例中,您有im_warped[i][j]=0。这是一条指令:它告诉Python将0赋值给im_warped[i][j]。如果你要写

   z = if condition:
          x 
       else:
          y

这将在Python中返回一个错误,因为在Python中,如果then else不是三元运算符,它是一个控制语句。它不返回任何条件值或默认值。相反,它运行代码。默认情况下,不运行任何代码。编写if x < 0 or x >= ht or y < 0 or y >= wdt: im_warped[i][j] = 0时,返回值的不是if-then-else语句;而是将0的值放在它运行的代码中。你知道吗

Python中有一个三元运算符,但其语法略有不同:它是conditional_result if condition else default。所以你的第一个例子可以写成

   im_warped[i][j] = 0 if x < 0 or x >= ht or y < 0 or y >= wdt else im[x][y]

如果你要写

        im_warped[i][j] = im[x][y] if 0 < x < ht and 0 < y < wdt

如果没有else,则返回一个错误。你知道吗

如果没有else块,那么数据将不会发生任何其他变化。您的im_warped数组将只根据if语句修改一个条目

那么,您的问题的答案取决于在到达if语句之前对该数据所做的处理。如果它是用np.zeros创建的numpy数组,那么默认情况下它的所有条目都是0。如果是从其他地方获取的数据,那么这些默认值可以是任意值,并且取决于输入数据的外观。你知道吗

相关问题 更多 >