[讨论] sum 跟产生器的结合用法

楼主: art1 (人,原来不是人)   2020-10-05 03:59:04
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
完全想不到可以这样写,第一眼看上去似懂非懂,要研究了才知道其奥妙
感觉一些计算字符相关的东西都可以这样写的样子
作者: TitanEric (泰坦)   2020-10-05 10:50:00
这样写真的厉害 但要花一点时间才懂 尤其是理解in字串是True

Links booklink

Contact Us: admin [ a t ] ucptt.com