作者art1 (人,原来不是人)
看板Python
标题[讨论] sum 跟产生器的结合用法
时间Mon Oct 5 03:59:04 2020
def stringLenCJK(string):
# return string len including double count for double width characters
return sum(1 + (unicodedata.east_asian_width(c) in "WFA") for c in string)
在寻找计算双位元字的字串长度方法时,看到这个程式码
研究了一下发现(unicodedata.east_asian_width(c) in "WFA") for c in string 是
一个产生器,而 sum 的参数说明里面有提到可以用 iterable
两者结合的语意就变成把字串中的每一个字喂给 east_asian_width,如果
east_asian_width 回传的结果是 "W" 或 "F" 或 "A" 的话,就让总和 +2,否则 +1
完全想不到可以这样写,第一眼看上去似懂非懂,要研究了才知道其奥妙
感觉一些计算字元相关的东西都可以这样写的样子
--
「看在上帝的份上,我们不能当着孩子的面枪杀他的父亲!」
「那我们就连孩子一起干掉!」
「第一枪打中的是那个天真的孩子,第二枪是抱着孩子的母亲。第三枪
停顿了三秒,当难以致信的父亲擦拭着脸上爱子的脑浆从震惊中醒转
过来,慢慢的转头看向停车的地方,分辨出是谁在攻击他後,第三颗
子弹才将他的脑壳打飞。」 ─摘自〈狼群〉
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.173.42.118 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1601841547.A.36A.html
※ 编辑: art1 (218.173.42.118 台湾), 10/05/2020 04:05:20
1F:推 TitanEric: 这样写真的厉害 但要花一点时间才懂 尤其是理解in字串 10/05 10:50
2F:→ TitanEric: 是True 10/05 10:50