耳朵疼痛是什么原因| 2009年属什么生肖| 什么鱼不属于发物| 妈妈的妹妹应该叫什么| 谷雨是什么意思| 纹眉失败擦什么淡化| 收孕妇尿是干什么用的| 什么是初吻| 新疆为什么天黑的晚| 血脂高吃什么药好| 职级是什么意思| 嗓子哑了是什么原因| 免疫球蛋白g是什么意思| 胰岛素是什么器官分泌的| 7.3是什么星座| 六娃的能力是什么| 心肌梗塞是什么原因造成的| 什么水果对胃好更养胃| 下眼睑肿胀是什么原因| 支原体和衣原体有什么区别| 心率过快是什么原因| 同房有什么姿势| 例假为什么第一天最疼| 为什么有的人皮肤黑| 蒙脱石散是什么药| 双脚麻木是什么病的前兆| 天下之奇是什么生肖| 打压什么意思| 负离子是什么东西| 晕车为什么读第四声| 男生为什么喜欢女生| 止语是什么意思| 尿维生素c弱阳性是什么意思| 血小板低是什么原因引起的| 什么时候大暑| 中心句是什么意思| 喝酒脸红是什么原因造成的| 黄芪不能和什么一起吃| 世界上最难的字是什么字| ins是什么| 1987年五行属什么| birads3类是什么意思| 图腾是什么意思| 积是什么意思| 16是什么生肖| 什么是纤维化| 猫吐是什么原因| 朋友圈提到了我是什么意思| 养胃喝什么茶| 什么药可以流产| 痰多吃什么药| 宝宝什么意思| 奉天为什么改名沈阳| 老年人脚肿挂什么科| 算筹指的是什么| 枷锁是什么意思| 湿热吃什么| 危机四伏是什么生肖| 肿瘤标志物是什么意思| 骑马挥杆是什么牌子| 2015年是什么生肖| 阿托伐他汀钙片治什么病| 屎为什么是臭的| lily是什么牌子| 加德纳菌阳性是什么意思| 心肌酶高有什么危害| 小水母吃什么| 什么是寻麻疹| 秀米是什么| 胎儿左侧侧脑室增宽的原因是什么| 休克是什么症状| 什么是一本| 望周知是什么意思| 冲正是什么意思| 吃什么对眼睛有好处| 占卜什么意思| 健身吃什么| 普外科是看什么病的| 裸车是什么意思| 今年二十岁属什么生肖| 行政许可是什么意思| 孺子可教什么意思| 肾炎可以吃什么水果| 化疗后白细胞低吃什么补得快| 息肉样病变是什么意思| 7月6日是什么节日| 子宫附件彩超检查什么| 心软是什么意思| 鹅蛋有什么功效| 1991年属什么| 梦见下小雨是什么征兆| 正常尿液是什么味道| 多囊卵巢是什么原因造成的| 小孩说话不清楚挂什么科| 什么林什么染| 产后第一次来月经是什么颜色| 儿童嗓子疼吃什么药好| 心脏疼是什么感觉| 书犹药也下一句是什么| 我想长胖点有什么办法| 什么是动脉硬化| 静的部首是什么| 右眼跳代表什么| 手指甲凹凸不平是什么原因| 喝红花有什么作用与功效| 啾啾是什么意思| 有趣的灵魂是什么意思| 脾胃是什么意思| 世界上最软的东西是什么| 芒果吃了有什么好处| 猫抓病是什么病| 解表药是什么意思| 尿隐血1十是什么| 庚午五行属什么| 验孕棒两条杠什么意思| 感冒发烧吃点什么食物比较好| 口苦口干吃什么药| 口腔异味吃什么药| 胎儿永久性右脐静脉是什么意思| 晕血是什么原因| 舌苔黄腻厚是什么原因| 心口疼是什么原因引起的| 不偏不倚是什么意思| gi值是什么| 猪脚炖什么| 跖疣是什么原因造成的| 桃花是什么颜色| 除皱针什么牌子效果最好| 最好的油是什么油| 尿激酶的作用及功效是什么| 北京什么时候最热| 风肖是什么生肖| 胃在什么位置图片| 辅酶q10有什么作用| 耳石症是什么引起的| 信徒什么意思| 坐月子吃什么下奶最快最多最有效| 甲鱼炖什么好吃| 三高不能吃什么食物| 1959属什么生肖| 游园惊梦讲的是什么| 独立户口需要什么条件办理| lively是什么意思| 男人梦到蛇预示着什么| 经常打喷嚏是什么原因| 安阳车牌号是豫什么| 蜘蛛吃什么| 什么不什么| 胎儿左侧侧脑室增宽的原因是什么| 单宁是什么意思| 出生日期查五行缺什么| 耳朵尖的人什么命| 烂嘴唇是什么原因引起的| 买买提是什么意思| 脑胀是什么原因| 孕吐什么时候出现| 通勤什么意思| 九月十九是什么星座| 瑞士为什么这么有钱| 四川大学校长什么级别| 在什么前面用英语怎么说| 吃毓婷有什么副作用| 溃疡吃什么水果| 发烧时不宜喝什么饮料| 甲苯是什么东西| 胃左边疼是什么原因| 子宁不嗣音什么意思| 社保缴费基数和工资有什么关系| 阴囊潮湿吃什么中成药| 早上四五点是什么时辰| special是什么意思| 扁平疣是什么引起的| 盐酸二甲双胍缓释片什么时候吃| 什么品种的芒果最好吃| 什么是早恋| 诸神黄昏什么意思| 蜻蜓喜欢吃什么| 英氏属于什么档次的| 猫砂是什么材料做的| 松香有毒吗对人体有什么危害| 什么饺子馅最好吃| 肤浅什么意思| 因小失大是什么生肖| 三个十念什么| 脐带绕颈有什么症状| 指数是什么| 驳斥是什么意思| 啸是什么生肖| 撒贝宁是什么族| 松鼠喜欢吃什么食物| 欲拒还迎什么意思| 卵泡长得慢是什么原因造成的| 挂职是什么意思| Mary英文名什么意思| 孩子记忆力差是什么原因| 中国信什么教| 女人什么时候最容易怀孕| 被鬼缠身有什么症状| 睡觉时间长是什么原因| 月经突然提前一周是什么原因| 蛋白粉什么时间喝最好| 年柱比肩是什么意思| 酒精对皮肤有什么伤害| 奢望是什么意思| 清热去火喝什么茶| 梦见大白菜是什么意思| 冰箱为什么不制冷了| 挖野菜是什么意思| ncs是什么意思| 羊水是什么颜色的| ieg是什么意思| 圣诞节什么时候| 三级残疾是什么程度| 变色龙指什么样的人| 枝柯是什么意思| 早上吃什么早餐最好| 佩奇是什么意思| 梦见自己家盖房子是什么预兆| 挚爱适合用在什么人| 黄风怪是什么动物| 取环是什么意思| 脾胃虚弱有什么症状| 节节草有什么作用| 甘油三酯高吃什么食物| 嗓子疼吃什么水果好得快| 藿香正气水什么味| 咖啡是什么| 睡不着有什么好办法吗| 体征是什么意思| 牛黄安宫丸治什么病| 江湖是什么| 老年痴呆挂什么科| 肛门潮湿是什么情况| 今年贵庚是什么意思| 5月是什么月| 脾大对身体有什么影响| 检查胃挂什么科| pet一ct是一种什么检查| 四季花是什么花| 抗体阳性什么意思| hardly什么意思| 梦见桥断了有什么预兆| 什么水果不能吃| 精髓是什么意思| 水苏糖是什么东西| 闻名的闻什么意思| 多囊有什么危害| 男人艾灸什么地方壮阳| 白凉粉是什么做的| 剖腹产后可以吃什么| 打下巴用什么玻尿酸最好| 治疗勃起困难有什么药| 妇科臭氧治疗的作用是什么| 脱发严重是什么原因| 查肝炎做什么检查项目| 竖心旁的字有什么| 腿疼去医院挂什么科| 黑眼圈是什么原因导致的| 助产士一般什么学历| 空气刘海适合什么脸型| 腹腔淋巴结是什么意思| 武则天为什么立无字碑| 622是什么星座| 外痔长什么样| 百度

大话性能 替代 for 循环,让 Python 代码更 pythonic !

大话性能 · 2025-08-06 · 最后由 咸鱼菜鸡 回复于 2025-08-06 · 7812 次阅读
百度 3月12日上午,习近平出席十三届全国人大一次会议解放军和武警部队代表团全体会议并发表重要讲话。

为什么要挑战不在代码中使用 for 循环呢?因为这样可以促使你学习使用更高级、更地道的语法或库。以 Python 为例,本文介绍了许多大家其实在别人的代码里都见过、但自己很少用的语法。
从我开始探索 Python 中惊人的语言功能到现在已经有一段时间了。一开始,我给自己提出了一个挑战:练习更多的 Python 语法,降低使用 for 循环的频率。这让我的代码变得更简洁和规范,看起来更 pythonic!下面我将会介绍这样做的好处。

通常如下使用场景中会用到 for 循环:

  • 在一个序列来提取一些信息。

  • 从一个序列生成另一个序列。

  • 写 for 已成习惯。

幸运的是,Python 已经有很多工具可以帮助你完成这些工作,你只需要转移你的思路,并以不同的角度来思考它。

通过避免编写 for 循环,你可以获得什么好处:

  • 较少的代码量
  • 更好的代码可读性
  • 更少的缩进(对 Python 还是很有意义的)

我们来看一下下面的代码结构:

# 1
with ...:
    for ...:
        if ...:
            try:
            except:
        else:

在这个例子中,我们正在处理多层嵌套的代码,这很难阅读。这个例子使用了多层嵌套的代码。我在这段代码中发现它无差别使用缩进把管理逻辑(with, try-except)和业务逻辑(for, if)混在一起。如果你遵守只对管理逻辑使用缩进的规范,那么核心业务逻辑应该立刻脱离出来。

"扁平结构比嵌套结构更好" - The Zen of Python

可以使用的已有的工具来替换 for 循环

1.List Comprehension / Generator 表达式

我们来看一个简单的例子。如果你想将一个数组转换为另一个数组:

result = []
for item in item_list:
    new_item = do_something_with(item)
    result.append(item)

如果你喜欢 MapReduce,你也可以使用 map,或者 Python 中的 List Comprehension:

result = [do_something_with(item) for item in item_list]

同样,如果您只想迭代数组中的元素,也可以使用一样的代码 Generator Expression。result = (do_something_with(item) for item in item_list)

2.函数

如果您想要将一个数组映射成另外数组,只需调用 map 函数,就可以用一个更高级、更实用的编程方式解决这个问题。

doubled_list = map(lambda x: x * 2, old_list)

如果要将序列减少为单个,请使用 reduce

from functools import reduce
summation = reduce(lambda x, y: x + y, numbers)

另外,许多 Python 内置函数都会使用 iterables:

>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> all(a)
False
>>> any(a)
True
>>> max(a)
9
>>> min(a)
0
>>> list(filter(bool, a))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> set(a)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> dict(zip(a,a))
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
>>> sorted(a, reverse=True)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> str(a)
'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]'
>>> sum(a)
45

3.Extract Functions or Generators

上述两种方法是很好的处理更简单的逻辑。更复杂的逻辑怎么样?作为程序员,我们编写函数来抽离出复杂的业务。相同的想法适用于此。如果你是这样写的:

results = []
for item in item_list:
    # setups
    # condition
    # processing
    # calculation
    results.append(result)

显然,你让一个代码块承担了太多的功能。相反,我建议你做:

def process_item(item):
    # setups
    # condition
    # processing
    # calculation
    return result

results = [process_item(item) for item in item_list]

如果换成嵌套函数会如何

results = []
for i in range(10):
    for j in range(i):
        results.append((i, j))

换成 List Comprehension 来实现是这样的

results = [(i, j)
           for i in range(10)
           for j in range(i)]

如果你的代码块需要记录一些内部状态

# finding the max prior to the current item
a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
results = []
current_max = 0
for i in a:
    current_max = max(i, current_max)
    results.append(current_max)

# results = [3, 4, 6, 6, 6, 9, 9, 9, 9, 9]

我们使用 generator 来实现这一点

def max_generator(numbers):
    current_max = 0
    for i in numbers:
        current_max = max(i, current_max)
        yield current_max

a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
results = list(max_generator(a))

读者可能要问 “等等!你在 generator 中用到 for 循环,作弊啊!别急,再看看下面的代码。

不需要自己写,itertools 已经帮你实现了

这个模块很简单,我相信这个模块在大多数场景中可以替换你原先的 for 循环。

例如,最后一个例子可以重写为:

from itertools import accumulate
a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
resutls = list(accumulate(a, max))

另外,如果要迭代组合序列,则需要使用 product(), permutations(), combinations()。

结论

在大多数情况下,都不需要写 for 循环。

应该尽量避免写 for 循环,这样会有更好的代码可读性。
更多内容可以学习《测试工程师 Python 工具开发实战》书籍《大话性能测试 JMeter 实战》书籍

共收到 2 条回复 时间 点赞
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
医院打耳洞挂什么科 春秋大梦是什么意思 什么是植物神经 大姨妈有黑色血块是什么原因 午时是什么时间
面色潮红是什么原因 水痘疫苗什么时候接种 达字五行属什么 女性湿气重喝什么茶 鹦鹉代表什么生肖
糖化血红蛋白高是什么意思 锦五行属什么 艾灸肚脐有什么好处 什么辣椒又香又辣 吉尼斯是什么意思
712什么星座 黄体破裂是什么症状 喉咙不舒服挂什么科 益气是什么意思 nt值代表什么
丁未年五行属什么hcv9jop3ns2r.cn 吃什么去肝火见效快jinxinzhichuang.com delvaux是什么牌子imcecn.com 小孩睡觉流鼻血是什么原因引起的hcv7jop6ns9r.cn 淀粉酶测定是查什么hcv7jop9ns5r.cn
头皮痒掉发严重是什么原因hcv8jop4ns3r.cn 梦中梦是什么原因hcv9jop1ns3r.cn 二甲双胍有什么副作用hcv8jop8ns5r.cn 指模是什么意思hcv8jop0ns5r.cn 梦见一个人说明什么hcv9jop1ns8r.cn
睡觉醒来口苦是什么原因hcv9jop1ns6r.cn 男命正印代表什么hcv8jop1ns7r.cn 星星代表什么生肖hcv9jop2ns2r.cn 什么人不能吃海参hcv8jop7ns5r.cn 女人肚子大是什么原因hcv9jop1ns2r.cn
小狗需要打什么疫苗hcv7jop9ns8r.cn 什么是纤维fenrenren.com 1314代表什么意思hcv9jop4ns3r.cn 嗓子疼看什么科室sanhestory.com ca199是什么意思huizhijixie.com
百度