Python 板


LINE

: 推 TuCH: print(",".join([i.get('name') for i in a])) 12/05 14:06 这里有个可以再优化的地方是把 [] 去掉,变成: print(",".join(i.get('name') for i in a)) 与原做法的差异在於原作法是 list comprehension, 会先建立一个暂时的 list,再对该 list 跑 join,然後清掉该 list, 如果 list 很大,这个暂时的 list 会占用不少记忆体空间。 (i.get('name') for i in a) 的写法称作 generator expression, (传入函数时可省略一层括号) 它产生的是 generator,generator 是在被迭代时才即时执行,即时传回值。 由於不须建立暂时的 list,效能较好,记忆体消耗也较少。 ref: https://www.python.org/dev/peps/pep-0289/ 此外,如果要去掉 list 的最後 n 笔项目,用简单的 list slicing 可以做到: print(",".join(i.get('name') for i in a[:-n])) 不过这做法一样会先建立一个暂时的新 list a[:-n], 如果想再进一步优化,可以写成这样: (range 也是传回 generator) print(",".join(a[i].get('name') for i in range(len(a) - n))) 最後,还有一个吹毛求疵的优化是写成: print(*(a[i].get('name') for i in range(len(a) - n)), sep=',') 也就是把 (a[i].get('name') for i in range(len(a) - n)) 这个 generator 迭代 出来的值变成 print 的多个参数,让它逐一印出各片段和分隔字元, 和前者的差异在於前者要先建立一个连接好的大字串, 後者不用,因此可节省记忆体及提高效能。 但是要注意,在 Python < 3.7 函数有参数上限 255 的限制, 如果 a 很长可能会导致出错。 若有这部分疑虑,还是使用 join 比较保险。 ref: https://stackoverflow.com/questions/714475/what-is-a-maximum-number-of-arguments-in-a-python-function 总之,generator 是 Python 非常强大的功能之一, 擅用它可以让程式码既精简又高效。 -- 《终结内容农场》浏览器套件 Chrome: http://bit.ly/CFTGC (桌机 & Android 手机) Firefox: http://bit.ly/CFTFx 真相1: http://bit.ly/CFTss1 真相2: http://bit.ly/CFTss2 详细介绍:http://bit.ly/CFTinfo --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.243.222.59 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1575803089.A.43C.html ※ 编辑: danny0838 (111.243.222.59 台湾), 12/08/2019 20:41:19
1F:推 yummy8765: 推 12/08 23:18
2F:推 cuteSquirrel: 推 12/09 00:24
3F:推 TuCH: 受益良多 12/09 09:02
4F:推 hongyan: 学到了。谢谢分享 12/09 12:19
5F:推 froce: 推,生成器真的很好用。 12/10 07:43
6F:推 wargods8402: 推... 12/10 14:03
7F:推 kangapoo: 优文给推 12/11 14:55
8F:推 plankton: 推  12/18 15:14







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP