C语言中很常见的一种操作是“黑掉”空if语句,就像这样:
if(mostlyhappencondition)
;#empty statement
else{
dosomething;
}
这个在Python中能够运行吗?我的意思是,我们可以通过使用Python来提高应用程序的性能吗?我还想知道原因。
C语言中很常见的一种操作是“黑掉”空if语句,就像这样:
if(mostlyhappencondition)
;#empty statement
else{
dosomething;
}
这个在Python中能够运行吗?我的意思是,我们可以通过使用Python来提高应用程序的性能吗?我还想知道原因。
dis.dis(foo)
输出结果:def foo(x):
if x:
pass
else:
return x+2
分解为:
5 0 LOAD_FAST 0 (x)
3 POP_JUMP_IF_FALSE 9
6 6 JUMP_FORWARD 8 (to 17)
8 >> 9 LOAD_FAST 0 (x)
12 LOAD_CONST 1 (2)
15 BINARY_ADD
16 RETURN_VALUE
>> 17 LOAD_CONST 0 (None)
20 RETURN_VALUE
def foo(x):
if not x:
return x+2
分解为:
11 0 LOAD_FAST 0 (x)
3 POP_JUMP_IF_TRUE 14
12 6 LOAD_FAST 0 (x)
9 LOAD_CONST 1 (2)
12 BINARY_ADD
13 RETURN_VALUE
>> 14 LOAD_CONST 0 (None)
pass
语句,有时需要创建一个空代码块以防止语法错误。if mostlyhappencondition:
pass
else:
do_something()
通常更常见的做法是直接这样做,这在逻辑上是等价的:
if not mostlyhappencondition:
do_something()
if True:
中没有任何内容的情况下,您可以做...if not mostlyhappenedcondition:
do something()
不会的,这并不能提高性能。事实上,在C中也不行。你从哪里听来的?
not
/!
读起来更好,并且速度应该差不多。
实际上,使用 gcc -O4
进行了测试:
#include <stdio.h>
int main(int argc, char *argv[]) {
for(int i = 0; i < 1000000000; i++) {
if(!(i < 900000000)) {
putchar('.');
}
}
}
对比。
#include <stdio.h>
int main(int argc, char *argv[]) {
for(int i = 0; i < 1000000000; i++) {
if(i < 900000000);
else {
putchar('.');
}
}
}
在我的电脑上,#1花费了6.62秒,#2花费了6.64秒。
if not some_thing and not some_thing_else: do_something
,不如阅读代码if something or something_else: pass else: do_something
。这里的答案有所帮助!谢谢。 - Sourabh Bhatif-elif[-...]-else
块中测试(验证)多个事物时,就像在if some-long-condition: pass elif one-more-long-condition: pass [elif ...] else: return (exit function with) something-like-abrupt-error-message
中所示,与@SourabhBhat-分享的有些相似。这比否定条件并在每个if或elif中返回类似突然错误消息的方式要方便得多。 - Alexander Ites