我有以下 C 程序作为我希望能够在 python 中执行的示例:
foo@foo:~/$ cat test.c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool get_false(){
return false;
}
bool get_true(){
return true;
}
void main(int argc, char* argv[]){
bool x, y;
if ( x = get_false() ){
printf("Whiskey. Tango. Foxtrot.\n");
}
if ( y = get_true() ){
printf("Nothing to see here, keep moving.\n");
}
}
foo@foo:~/$ gcc test.c -o test
test.c: In function ‘main’:
test.c:13: warning: return type of ‘main’ is not ‘int’
foo@foo:~/$ ./test
Nothing to see here, keep moving.
foo@foo:~/$
在 python 中,我知道如何做到这一点的唯一方法是:
foo@foo:~/$ cat test.py
def get_false():
return False
def get_true():
return True
if __name__ == '__main__':
x = get_false()
if x:
print "Whiskey. Tango. Foxtrot."
y = get_true()
if y:
print "Nothing to see here, keep moving."
#if (z = get_false()):
# print "Uncommenting this will give me a syntax error."
#if (a = get_false()) == False:
# print "This doesn't work either...also invalid syntax."
foo@foo:~/$ python test.py
Nothing to see here, keep moving.
为什么?因为我想说:
if not (x=get_false()): x={}
基本上我正在解决一个糟糕的 API,其中返回的类型要么是数据可用时的字典,要么是 False。是的,一个有效的答案是返回一致的类型并使用 Exceptions 而不是 False 作为故障模式指示器。不过,我无法更改底层 API,而且我在 Python 等具有动态类型的环境中经常遇到这种模式(阅读:对函数/方法接口没有严格的类型)。
关于如何减少 if/else 开销的任何建议?