答案 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