str.upper()。isupper()可能为False

时间:2013-05-11 07:32:32

标签: python

我在官方Python documentation中看到了这句话:

str.upper().isupper() might be False

有人可以解释一下吗?

6 个答案:

答案 0 :(得分:4)

如果字符串是数字或由没有大写变体的字符组成(特殊字符等) 例如:

>>> '42'.upper().isupper()
False
>>> '-'.upper().isupper()
False

正如所料:

>>> '42a'.upper().isupper()
True

请小心,因为许多unicode角色有一些奇怪的行为(参见thg435的回答:https://stackoverflow.com/a/16495101/531222

答案 1 :(得分:4)

他们陈述的更多背景:

  

str.upper()。如果s包含无框字符,则isupper()可能为False   或者如果结果字符的Unicode类别不是“Lu”   (字母,大写),但例如“Lt”(Letter,titlecase)。

无框字符的示例:

>>> '1'.upper().isupper()
False

答案 2 :(得分:4)

在我看来,isupper / islower函数在python中被破坏了。首先,他们使用了“套管”的错误定义。 Unicode中有许多符号具有大小写变体,但不属于L类别。例如,显然是大写的,并且小写等效,但"Ⓐ".isupper()在python中为False。有关详细信息,请参阅this bug report

其次,存在逻辑错误。 isupper与“所有套管字符在此字符串中都是上限”相同,如果没有套接字符,则应返回True,而不是False,就像内置all()一样(“所有独角兽是红色的“是真的”。这样可以很容易地避免混淆。

答案 3 :(得分:2)

如果string包含不支持大写的unicode字符:

>>> "عربية للفوتوشوب".upper().isupper()
False

str.upper对数字毫无意义:

>>> "3432".upper().isupper()
False

答案 4 :(得分:1)

有些东西没有大写(我猜只有字母,甚至不是所有语言)。

所以这些不会被upper提升,而不是isupper

答案 5 :(得分:1)

是的,如果字符串包含数字和其他没有upperCase

的字符,则为true