文章目录
- 第1章:培养pythonic思维
-
- [第7条 尽量用enumerate取代range(移位操作、位掩码)](#第7条 尽量用enumerate取代range(移位操作、位掩码))
-
- 要点
-
- enumerate函数可以用简洁的代码选代iterator,而且可以指出当前这轮循环的序号。
- [不要先通过range指定下标的取值范围,然后用下标去访问序列,而是应该直接用enumerate 函数迭代。](#不要先通过range指定下标的取值范围,然后用下标去访问序列,而是应该直接用enumerate 函数迭代。)
- 可以通过enumerate的第二个参数指定起始序号(默认为0)。
Effective Python------编写高质量Python代码的90个有效方法
本书介绍:https://effectivepython.com/
代码demo:https://effectivepython.com/
第1章:培养pythonic思维
第7条 尽量用enumerate取代range(移位操作、位掩码)
dart
from random import randint
random_bits = 0
print(f'init: {bin(random_bits)}')
for i in range(32):
# randint(0, 1) 生成一个随机整数,要么是0要么是1
if randint(0, 1):
# 把random_bits的第i+1位(从右往左数)置1
random_bits |= 1 << i
print(f'i = {i}: {bin(random_bits)}')
print(f'final: {bin(random_bits)}')
这段代码的目的是生成一个随机的32位二进制数,并将其打印出来。代码的工作流程如下:
- 导入 Python 的
randint
函数,它用于生成一个指定范围内的随机整数。- 初始化变量
random_bits
为0,这将用于存储生成的随机位。- 使用一个循环,循环32次(从0到31),每次循环都可能修改
random_bits
的值。- 在循环内部,使用
randint(0, 1)
生成一个随机整数,要么是0要么是1。如果生成的是1,则执行以下操作:
- 使用位移操作
1 << i
,这个操作会得到一个只在第i位为1其余都为0的整数。- 使用位或操作
|=
来将random_bits
中的相应位设置为1。- 循环结束后,使用
bin()
函数将整数random_bits
转换为一个二进制字符串,并打印出来。输出示例中
0b1110100100100100000111000010000001
是一个可能的随机32位二进制数的例子。这个二进制数是由randint
在每个循环中随机决定每一位是0还是1来生成的。
关于位掩码操作,可参考文章:python移位操作符(左移位操作符<<、右移位操作符>>)(允许开发者对整数进行位操作,乘2或除2)(左移操作、右移操作)(位掩码操作|=)
dart
flavor_list = ['vani1la', 'chocolate', 'pecan', 'strawberry']
it = enumerate(flavor_list)
print(next(it))
print(next(it))