Python any() - 除了0之外,每个数字都返回true吗?

时间:2018-06-14 20:40:24

标签: python

我在网页上有多个数量输入字段,只允许正整数值。

我的第一段代码如下:

quantities = []
for form in forms:
    qty= form.cleaned_data['qty']
    if qty:
        quantities.append(qty)
if not quantities:
    raise forms.ValidationError("You didn't choose any books")

在查看我的代码后,我发现了一个较短的版本:

if not any([form.cleaned_data['qty'] for form in forms]):
    raise forms.ValidationError("You didn't choose any books")

这总是有效吗?除True之外,每个整数的评估结果为0吗?

2 个答案:

答案 0 :(得分:4)

一般来说,是的。

除非特别定义,否则python中的大多数对象都被视为True。

参见source&以下例外:

  

4. Built-in Types (Python 3 documentation)

     

4.1。真值测试

     

可以测试任何对象的真值,用于if或while条件或下面布尔运算的操作数。

     

默认情况下,对象被视为true ,除非其类定义返回False的 bool ()方法或 len ()方法,当使用对象调用时返回零。以下是大多数被认为是错误的内置对象:

     

定义为false的常量:

     

错误。

     

任何数字类型的零: 0 0.0 0j 十进制(0)分数(0,1)

     

空序列和集合:&#39; () [] {} < / strong>,设置()范围(0)

     

具有布尔结果的操作和内置函数始终返回 0 False 表示false, 1 True < / strong>为true,除非另有说明。

     

(重要的例外:布尔运算或者并且始终返回其中一个操作数。)

答案 1 :(得分:0)

给定整数(int s)作为您的域名,答案是肯定的。 Python中唯一的 falsy 整数值是0。当评估为True时,所有其他整数均为bool