我正在将一段Python代码翻译成C语言,以便利用HPC系统中的并行性(这是一个痛苦的过程),但我遇到了原始程序员在Python中使用的条件语句,让我感到困惑。
if rnum <> current_res:
alim = 0
if len(f): alim = f[-1]
if len(f)是什么意思?我在网上没有找到这种用法惯例。我想这可能是一种不好的编程习惯。
如有帮助,将不胜感激!
我正在将一段Python代码翻译成C语言,以便利用HPC系统中的并行性(这是一个痛苦的过程),但我遇到了原始程序员在Python中使用的条件语句,让我感到困惑。
if rnum <> current_res:
alim = 0
if len(f): alim = f[-1]
if len(f)是什么意思?我在网上没有找到这种用法惯例。我想这可能是一种不好的编程习惯。
如有帮助,将不胜感激!
if f: alim = f[-1]
False
,长度非零则为True
。(请注意,这并不一定适用于非内置的序列类型,只适用于以这种方式实现了__bool__
的序列类型。)<>
已被弃用;您应该使用!=
代替。len(f)
与 f
具有相同的真值,这样安全吗?当然这取决于 f
。 - Awaliasf
实现了自定义的 __nonzero__
(__bool__
py3k),那么它们可能是不同的,但这是一个罕见的情况。 - mgilsonf
是否是我创建的一个类,并且我重写了__len__以返回4...那就不一样了。但是如果我真的这么做了,那我应该被打。 - pcalcao__nonzero__
,那么它将保持不变。 - mgilsonif len(f):
和 if f:
的含义相同...原因是如果 f
没有长度,则返回 0
,这是一个假值。 实际上,真值测试实际上检查对象的长度(__len__
),在某些情况下会检查 非零值。标签
if len(f)
would translate to:
if len(f) != 0
在这种情况下,由于len(f)
永远不会是负数,
if len(f) > 0
!= 0
,但由于您不能拥有负长度序列,因此它在功能上并不相关。 - Silas Raylen
,而且我包含它是因为len > 0
更易读。 - askewchan大于等于0的整数
,但我不知道这是否被强制执行或只是期望... - mgilson__len__
返回一个负数。或者是一个字符串。或者是一个数据库连接对象。 - Silas RayC
,而不是使旧的 Python 代码更具有 Python 风格。 - askewchan
<>
已经被弃用,请使用!=
替代。 - Martijn Pieters