我正在翻译Python代码到C,以便利用HPC系统上可用的并行(这是一个痛苦的过程),我遇到了Python中的条件原始程序员使我困惑如果len(列表)在Python
if rnum <> current_res:
alim = 0
if len(f): alim = f[-1]
如果len(f)满足怎么办?我无法在网上找到这种使用这种方式的惯例。我想这是一个糟糕的编程习惯。
任何帮助将不胜感激!
我正在翻译Python代码到C,以便利用HPC系统上可用的并行(这是一个痛苦的过程),我遇到了Python中的条件原始程序员使我困惑如果len(列表)在Python
if rnum <> current_res:
alim = 0
if len(f): alim = f[-1]
如果len(f)满足怎么办?我无法在网上找到这种使用这种方式的惯例。我想这是一个糟糕的编程习惯。
任何帮助将不胜感激!
在Python中,被视为'空'的值(例如数字0)在布尔上下文中被视为False,否则为True。
因此,如果f
有长度,则len(f)
为真,否则为空。如果f
是一个标准的Python序列类型则代码可以被简化为:
if f: alim = f[-1]
因为这同样适用于子序列;空是假的,具有非零长度意味着它是真的。
有关所有重要细节,请参阅Python文档中的Truth Value Testing。
请注意,<>
已被弃用;你应该真的使用!=
来代替。
在大多数情况下if len(f):
将是同样的事情if f:
......
的原因是因为如果f
没有长度,它将返回0
这是一个falsy值。其实,真理实际测试检查对象的长度(__len__
)under some circumstances.
这
if len(f)
将转化:
if len(f) != 0
或在这种情况下,由于len(f)
从不为负,
if len(f) > 0
'<>'早已弃用。改用'!='。 – 2013-04-09 14:53:58