我正在将Python代码翻译为C,以便利用HPC系统上可用的并行性(这是一个痛苦的过程),并且我遇到了原始程序员使用的Python中的条件混乱我
if rnum <> current_res:
alim = 0
if len(f): alim = f[-1]
如果len(f)满足怎么办?我无法在网上找到以这种方式使用的这种约定。我认为这是一个糟糕的编程习惯。
非常感谢任何帮助!
答案 0 :(得分:14)
在Python中,被视为“空”的值(例如数字0)在布尔上下文中被视为False,否则为True。
因此,如果len(f)
有长度,则f
为True,否则为空。如果f
是标准的Python序列类型,那么代码可以简化为:
if f: alim = f[-1]
因为这同样适用于序列; empty为False,长度非零意味着它为True。
有关所有重要细节,请参阅Python文档中的Truth Value Testing。
请注意,<>
已被弃用;你应该真的使用!=
。
答案 1 :(得分:8)
在大多数情况下,if len(f):
与if f:
...
原因是因为如果f
没有长度,它将返回0
这是一个假值。实际上,真值测试实际上会检查对象的长度(__len__
)under some circumstances.
答案 2 :(得分:4)
此
if len(f)
会转换为:
if len(f) != 0
或者在这种情况下,因为len(f)
永远不会消极,
if len(f) > 0