【Effective Python教程】(90个有效方法)笔记——第1章:培养pythonic思维——7:尽量用enumerate取代range

文章目录

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位二进制数,并将其打印出来。代码的工作流程如下:

  1. 导入 Python 的 randint 函数,它用于生成一个指定范围内的随机整数。
  2. 初始化变量 random_bits 为0,这将用于存储生成的随机位。
  3. 使用一个循环,循环32次(从0到31),每次循环都可能修改 random_bits 的值。
  4. 在循环内部,使用 randint(0, 1) 生成一个随机整数,要么是0要么是1。如果生成的是1,则执行以下操作:
    • 使用位移操作 1 << i,这个操作会得到一个只在第i位为1其余都为0的整数。
    • 使用位或操作 |= 来将 random_bits 中的相应位设置为1。
  5. 循环结束后,使用 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))


要点

enumerate函数可以用简洁的代码选代iterator,而且可以指出当前这轮循环的序号。
不要先通过range指定下标的取值范围,然后用下标去访问序列,而是应该直接用enumerate 函数迭代。
可以通过enumerate的第二个参数指定起始序号(默认为0)。
相关推荐
三品吉他手会点灯几秒前
C语言学习笔记 - 42.数据类型 - scanf函数深度解析
c语言·开发语言·笔记·学习
来生硬件工程师3 分钟前
【51单片机学习笔记】:P01 STC89C52RC
笔记·学习·51单片机
中屹指纹浏览器7 分钟前
2026浏览器本地缓存分区机制演进与沙箱缓存差异化运维探究
经验分享·笔记
隔窗听雨眠11 分钟前
ORM框架选型指南:MyBatis与Hibernate的全面对比
java·开发语言·数据库
ZHW_AI课题组11 分钟前
使用Stable Diffusion v1.5文本引导与无分类器引导(CFG)算法实现条件生成图片
人工智能·python·算法·机器学习·stable diffusion
盼小辉丶12 分钟前
OpenCV-Python实战(25)——基于深度传感器与凸性分析打造实时手势识别系统
人工智能·python·opencv·计算机视觉
-凌凌漆-14 分钟前
【Qt】C++中protected与private的区别
开发语言·c++·qt
金融大 k16 分钟前
行情数据接入 MCP:Claude Code / Cursor 工具描述怎么写才不踩坑
人工智能·python·websocket·行情 api
j7~18 分钟前
【C++】类和对象(上)--带你全面理解类和对象的概念,以及this指针的理解和相关面试题
java·开发语言·封装·this指针·类的实例化·访问限定符·类的命名
叶帆18 分钟前
【YFIOs】用C#开发硬件之串口通信
开发语言·c#