【问题标题】:How and why is string.isdigit() locale dependent?string.isdigit() 语言环境如何以及为什么依赖?
【发布时间】:2012-07-02 13:59:47
【问题描述】:

Python有字符串功能,可以检测所有字符是否都是数字:string.isdigit()

手册上是这样写的:

对于 8 位字符串,此方法取决于语言环境

这种方法如何依赖于语言环境?在哪些语言环境中存在 0-9 范围之外的数字?

另外,如果这取决于区域设置,python 是否有一种方法可以使用特定的区域设置(即只有 0-9 位)来检查它。

【问题讨论】:

  • 我认为手动只是意味着实际的 8 位字符代码取决于区域设置,而不是字符不是 0-9。

标签: python locale digit


【解决方案1】:

CPython 对字符串的 is_digit 方法使用 C 函数“isdigit”(参见 stringobject.c)。请参阅此相关主题:Can isdigit legitimately be locale dependent in C

显然,它与上标数字有关,例如 0xB2 ('²')、0xB3 ('³') 和 0xB9 ('¹')。

HTH

【讨论】:

    【解决方案2】:

    python 有没有一种方法可以用特定的语言环境检查它(即只有 0-9 位数字)。

    最简单的方法:

    >>> '1' in '1234567890'
    True
    >>> 'a' in '1234567890'
    False
    

    你也可以检查ord,它可能更快isn't):

    >>> ord('0') <= ord('a') <= ord('9')
    False
    >>> ord('0') <= ord('5') <= ord('9')
    True
    

    【讨论】:

    • 查找全局函数并调用它 3 次,不应该比加载本地函数并在 C 中进行 10 个字符比较快。
    • 这只检查一个字符,而不是一整串数字。
    • 您可以使用all(function(e) for e in seq)将其应用于序列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2014-04-24
    • 1970-01-01
    • 2022-01-17
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多