[討論] 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