python bool类型,Python Bool和int比较以及带有布尔值的列表索引

Indexing on list with boolean values works fine.

Though the index should be an integer.

Following is what I tried in console:

>>> l = [1,2,3,4,5,6]

>>>

>>> l[False]

1

>>> l[True]

2

>>> l[False + True]

2

>>> l[False + 2*True]

3

>>>

>>> l['0']

Traceback (most recent call last):

File "", line 1, in

TypeError: list indices must be integers, not str

>>> type(True)

When I tried l['0'] it printed error that int type expected in indices and that is obvious.

Then, even the type of 'True' and 'False' being Bool, indexing on the list works fine and automatically converts it to int type and performs the operation.

Please explain what is going on internally.

I am posting question for the first time, so please forgive me for any mistake.

解决方案

What's going on is that booleans actually are integers. True is 1 and False is 0. Bool is a subtype of int.

>>> isinstance(True, int)

True

>>> issubclass(bool, int)

True

So it's not converting them to integers, it's just using them as integers.

(Bools are ints for historical reasons. Before a bool type existed in Python, people used the integer 0 to mean false and 1 to mean true. So when they added a bool type, they made the boolean values integers in order to maintain backward compatibility with old code that used these integer values. See for instance http://www.peterbe.com/plog/bool-is-int .)

>>> help(True)

Help on bool object:

class bool(int)

| bool(x) -> bool

|

| Returns True when the argument x is true, False otherwise.

| The builtins True and False are the only two instances of the class bool.

| The class bool is a subclass of the class int, and cannot be subclassed.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值