假設如下:
>>> square = '2'/span> # Superscript Two (Unicode U 00B2)/span>
>>> cube = '3' # 超標三(Unicode U 00B3)
奇怪的是:
>>> square.isdigit()
True
>>> cube.isdigit()
True
好的,讓我們把這些 "數字 "轉換為整數:
int(square)
回溯(最近一次呼叫)。
檔案"<stdin>",行1,in<module>
ValueError: invalid literal for int() with base 10: '2'。
int(cube)
回溯(最近一次呼叫)。
檔案"<stdin>",行1,in<module>
ValueError: invalid literal for int() with base 10: '3'。
哎呀!
誰能解釋一下,在處理字串時,我應該從str.isdigit()方法中期待什么行為?
uj5u.com熱心網友回復:
str.isdigit并沒有聲稱與可決議性有關的int。它報告的是一個簡單的Unicode屬性,它是一個十進制字符還是某種數字:
。
str.isdigit()如果字串中的所有字符都是數字并且至少有一個字符,則回傳
True,否則回傳False。數字包括十進制字符和需要特殊處理的數字,如兼容上標數字。這涵蓋了不能用于形成基數10的數字的數字,如Kharosthi數字。從形式上看,一個數字是一個具有Numeric_Type=Digit或Numeric_Type=Decimal屬性值的字符。
簡而言之,str.isdigit對于檢測有效數字來說是完全無用的。檢查一個給定的字串是否是一個合法的整數的正確解決方案是對它呼叫int,如果它不是一個合法的整數,則捕獲ValueError。你所做的任何其他事情都是在重新發明int()中的實際決議代碼所執行的相同測驗,所以為什么不讓它首先做這些作業呢?
旁注:你錯誤地使用了 "utf-8 "這個術語。UTF-8 是一種特殊的 Unicode 編碼方式,它只適用于原始二進制資料。Python 的 str 是一個 "理想化 "的 Unicode 文本型別;它沒有編碼 (在引擎下,它被存盤為 ASCII、latin-1、UCS-2、UCS-4 中的一種編碼,也可能是 UTF-8,但是在 Python 層,除了像 sys.getsizeof 這樣的間接測量外,這些都不可見,它只是通過讓你看到字串消耗了多少記憶體來暗示底層編碼。) 你所說的字符是高于 ASCII 范圍的簡單 Unicode 字符,它們并不是專門的 UTF-8.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/331565.html
標籤:
