Python中的if len(list)
我正在将Python代码翻译成C,以便利用HPC系统上可用的并行性(这是一个痛苦的过程),我在Python中遇到了一个原始程序员使用的条件,这让我感到困惑Python中的if len(list),python,Python,我正在将Python代码翻译成C,以便利用HPC系统上可用的并行性(这是一个痛苦的过程),我在Python中遇到了一个原始程序员使用的条件,这让我感到困惑 if rnum <> current_res: alim = 0 if len(f): alim = f[-1] 如果rnum当前值: 阿利姆=0 如果len(f):alim=f[-1] 如果len(f)满足怎么办?我在网上的任何地方都找不到这种惯例。我认为这是一种糟糕的编程实践 任何帮助都将不胜
if rnum <> current_res:
alim = 0
if len(f): alim = f[-1]
如果rnum当前值:
阿利姆=0
如果len(f):alim=f[-1]
如果len(f)满足怎么办?我在网上的任何地方都找不到这种惯例。我认为这是一种糟糕的编程实践
任何帮助都将不胜感激 在Python中,被视为“空”的值(如数字0)在布尔上下文中被视为False,否则为True 因此,如果
f
具有长度,则len(f)
为真,否则为空。如果f
是标准的Python序列类型,那么代码可以简化为:
if f: alim = f[-1]
因为这同样适用于序列;empty为False,长度非零表示为True
有关所有重要的详细信息,请参见Python文档中的
请注意,
已被弃用;你真的应该使用=
相反。在大多数情况下,如果len(f):与如果f:相同
原因是如果f
没有长度,它将返回0
,这是一个错误的值。事实上,真值测试实际上是检查一个对象的长度(\uu len\uuu
)
if len(f)
将转化为:
if len(f) != 0
或者在这种情况下,因为len(f)
从不为负
if len(f) > 0
早就被弃用了。使用=代码>相反。严格来说,只有!=0
,但由于不能有负长度序列,因此它在功能上不相关。@sr2222,我已经澄清了答案。它们在这里是等价的,因为示例是len
,我之所以包含它,是因为len>0
可读性更强。@sr2222--但是你能给其他对象一个负长度吗?文档说结果应该是一个整数>=0
,但我不知道这意味着它是强制的或只是预期的…-0。如果f:
@mgilson-heh,python习语应该是,在意想不到的情况下,我认为len>0
是最好的选择:可以安全地假设len(f)
与f
具有相同的真值吗?当然,这取决于f
@Awalias:如果它是一个自定义序列类型,那么做出这样的假设是不安全的。@Awalias——如果f
实现了一个自定义的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu非零
(\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,如果f
是我创建的类,我重写len以返回4。。。这将是不一样的。但是,如果我这样做了,我也会被棍子打。@pcalcao——如果你没有用\uuuu nonzero\uuuuu
做任何事情,情况也会一样。