什么时候 `string.swapcase().swapcase()` 不等于 `string`?
When is `string.swapcase().swapcase()` not equal to `string`?
Documentation 对于 str.swapcase() 方法说:
Return a copy of the string with uppercase characters converted to lowercase and vice versa. Note that it is not necessarily true that s.swapcase().swapcase() == s.
我想不出一个例子 s.swapcase().swapcase() != s
,谁能想到一个?
一个简单的例子是:
s = "ß"
print(s.swapcase().swapcase())
Ouput:
ss
ß
is German lowercase double s (The correct uppercase version would be ẞ
)。发生这种情况的原因是 Python 不 "know" 或者想为每个 unicode 符号定义大写转换。所以它通过将 s.swapcase()
评估为 "SS"
来采取简单的方法,因此 s.swapcase().swapcase()
是 "ss"
.
事实上,例子范围很广:它发生在一些希腊符号、德国符号、亚美尼亚符号和其他 specific/special 符号上。
全部获取:
find_dif = lambda s: s.swapcase().swapcase() != s
[chr(s) for s in range(100000) if find_dif(chr(s))]
你得到:
['µ',
'ß',
'İ',
'ı',
'ʼn',
'ſ',
'ǰ',
'ͅ',
'ΐ',
'ΰ',
'ς',
'ϐ',
'ϑ',
'ϕ',
'ϖ',
'ϰ',
'ϱ',
'ϴ',
'ϵ',
'և',
'ᲀ',
'ᲁ',
'ᲂ',
'ᲃ',
'ᲄ',
'ᲅ',
'ᲆ',
'ᲇ',
'ᲈ',
'ẖ',
'ẗ',
'ẘ',
'ẙ',
'ẚ',
'ẛ',
'ẞ',
'ὐ',
'ὒ',
'ὔ',
'ὖ',
'ᾀ',
'ᾁ',
'ᾂ',
'ᾃ',
'ᾄ',
'ᾅ',
'ᾆ',
'ᾇ',
'ᾐ',
'ᾑ',
'ᾒ',
'ᾓ',
'ᾔ',
'ᾕ',
'ᾖ',
'ᾗ',
'ᾠ',
'ᾡ',
'ᾢ',
'ᾣ',
'ᾤ',
'ᾥ',
'ᾦ',
'ᾧ',
'ᾲ',
'ᾳ',
'ᾴ',
'ᾶ',
'ᾷ',
'ι',
'ῂ',
'ῃ',
'ῄ',
'ῆ',
'ῇ',
'ῒ',
'ΐ',
'ῖ',
'ῗ',
'ῢ',
'ΰ',
'ῤ',
'ῦ',
'ῧ',
'ῲ',
'ῳ',
'ῴ',
'ῶ',
'ῷ',
'Ω',
'K',
'Å',
'ff',
'fi',
'fl',
'ffi',
'ffl',
'ſt',
'st',
'ﬓ',
'ﬔ',
'ﬕ',
'ﬖ',
'ﬗ']
我们来看看:
s1 = 'µ'
s2 = s1.swapcase().swapcase()
s1 == s2
False
s1 = 'ß'
s2 = s1.swapcase().swapcase()
s1 == s2
False
s1 = 'ﬗ'
s2 = s1.swapcase().swapcase()
s1 == s2
False
Documentation 对于 str.swapcase() 方法说:
Return a copy of the string with uppercase characters converted to lowercase and vice versa. Note that it is not necessarily true that s.swapcase().swapcase() == s.
我想不出一个例子 s.swapcase().swapcase() != s
,谁能想到一个?
一个简单的例子是:
s = "ß"
print(s.swapcase().swapcase())
Ouput:
ss
ß
is German lowercase double s (The correct uppercase version would be ẞ
)。发生这种情况的原因是 Python 不 "know" 或者想为每个 unicode 符号定义大写转换。所以它通过将 s.swapcase()
评估为 "SS"
来采取简单的方法,因此 s.swapcase().swapcase()
是 "ss"
.
事实上,例子范围很广:它发生在一些希腊符号、德国符号、亚美尼亚符号和其他 specific/special 符号上。
全部获取:
find_dif = lambda s: s.swapcase().swapcase() != s
[chr(s) for s in range(100000) if find_dif(chr(s))]
你得到:
['µ', 'ß', 'İ', 'ı', 'ʼn', 'ſ', 'ǰ', 'ͅ', 'ΐ', 'ΰ', 'ς', 'ϐ', 'ϑ', 'ϕ', 'ϖ', 'ϰ', 'ϱ', 'ϴ', 'ϵ', 'և', 'ᲀ', 'ᲁ', 'ᲂ', 'ᲃ', 'ᲄ', 'ᲅ', 'ᲆ', 'ᲇ', 'ᲈ', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'ẚ', 'ẛ', 'ẞ', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ᾐ', 'ᾑ', 'ᾒ', 'ᾓ', 'ᾔ', 'ᾕ', 'ᾖ', 'ᾗ', 'ᾠ', 'ᾡ', 'ᾢ', 'ᾣ', 'ᾤ', 'ᾥ', 'ᾦ', 'ᾧ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'ι', 'ῂ', 'ῃ', 'ῄ', 'ῆ', 'ῇ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'ῢ', 'ΰ', 'ῤ', 'ῦ', 'ῧ', 'ῲ', 'ῳ', 'ῴ', 'ῶ', 'ῷ', 'Ω', 'K', 'Å', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'ſt', 'st', 'ﬓ', 'ﬔ', 'ﬕ', 'ﬖ', 'ﬗ']
我们来看看:
s1 = 'µ'
s2 = s1.swapcase().swapcase()
s1 == s2
False
s1 = 'ß'
s2 = s1.swapcase().swapcase()
s1 == s2
False
s1 = 'ﬗ'
s2 = s1.swapcase().swapcase()
s1 == s2
False