Python文档str.swapcase()说:
请注意,它不一定是真的
s.swapcase().swapcase() == s.
我猜这与Unicode有关; 然而,在两次申请之后,我无法生成一个改变的字符串swapcase().什么样的字符串不能产生相同的结果?
这是我测试的(在这里获得):
>>> testString = '''Bã??? í??ü? ????? ?ì? ä?é? ?ûì? à?ï?üí? ?ü??ä, ????â è? ?ê? ???í? ??êã? ?? ?ò ?? ?å?á?í é?è??ì?á?ï?? ?ò?? ????. Té??ë???í? ?ù??è? ?áû?á?è ?ù??å ???ïá?û?, ?á?? ?í? â???ï???ï?? ?? ????ê??ä? ?â??ã ?é?ï???. Mí?í? à??ë ???ü??å?? ?ò??í? ???-?í? ?è?ê?ù??. O??ãè?á? ?ë????? ê? ??ù???? ?é? ?á???ü? ?ò?? ?òï? à???ûå ì??í?ì?ú??. S?? ?ò????? ???? ???í?íä ?ò?? ?è??? ?é??ò? ?â?ò?ù? ?â?? ??å?ê ?í?? ?????? ?êá??òá? ?å??ä.
K?è??à?ã ?? ?ò??ê??ê??? ?ë?íà? ?â?í??ù? ???? ???? ê?ê??ì?â??ò? ä?ì?úí? ?â?????? ???? ?ò??üê ?ü?? ?????é ?ê??é?é??é?ï?. Tè??è????? ë? ?è??é????é?ï? ?û?íã? ä???ì?????? ???ü?? ??ú??, ???? ?í? ?à??û??è? ??òù???? ?å???û? ?ê???? ?í?ê?ë. E??è ?à? ?ë????, å?í?ù? ì?ü?? ?ò?? ???? ?ò ?????é ??â???ü???? ?ü??? ?å???ä?í ?à??à?è ?è?. E??ê??êü? ?ë? ?-???ë ???, ???ë ?? ?à???í? ?á?? ?í? ?????ú? ???ü??ê? ï? ??ò?? ?í?? ?á???á?ï. E??é ????û??ë? ?ä?ò?é, ????à?? ???????òï? ????? ?ï?? ??òì?é?? ???ê?? ???????. N???? ?ü??ù??è? ???, ????è ?ì?? ????????? á?ï?ì?ì?ï?? ê? ????? ?ò?? ?????ë ä?ï? ?ê?ê?ù??. S?ä???è ?ú?ï?ä?á? ???? ?òï? ?éå??ä??, ??????? ?é??è?é??ê?ì? ???????ê? ?â???í ?????è ?? ?ê????ã?.
B?û??? ?????ê ????è?ûå? ?à ?ü?? ?á?? ?í? ??â?é ?ì?? í? ??ò????? ?û?? ?í?ï? èí???ò? ????ê? ?èè? ????? ?????è. C???è? ?ëè? ??û?????? ?ù???, é?ï? ???? ?ì? ?é???â?? ?????ê ???-?ï? ?ë????? ???ù?? ?òù?? ??? ?? èä ?ã?ò?. E??é ì? ?ú??, ???ù??é? ?ï???ä?à ã?????ï?ï?? ????û??ê? ú? ?ò???? ?å??ä?? ???ò? ä?ï? ??ï-?í?. Eíù??ò? ?ü??ã ?ä?ò??? ?í?? ê??é??èú?. O??åé?å? ?üí? ?è???ü?? ?????? ????. Rè??é?ë??ê??? á?ï?úí? ?û??à? ?ù???? ?é??ã? ?üì?.'''
>>> testString.swapcase().swapcase() == testString
True
Run Code Online (Sandbox Code Playgroud)
Vol*_*ity 20
当多个字母是同一个字母的小写字母时就是这种情况.
例如,微字符µ (U + 00B5)和mu字符? (U + 03BC):
>>> u'\xb5'.swapcase()
u'\u039c'
>>> u'\u03bc'.swapcase()
u'\u039c'
Run Code Online (Sandbox Code Playgroud)
这两个是不同的字符,但它们的大写字母是相同的.这意味着在str.swapcase()应用时,它们将返回相同的字符.但是,再次这样做不能(也不会)返回两个字母.
>>> u'\xb5'.swapcase().swapcase()
u'\u03bc'
Run Code Online (Sandbox Code Playgroud)
虽然Volatility提出了将大写mu和大写微解析为同一个Unicode代码点的例子,但是另外一个有趣的情况是应用swapcase两次导致不同的答案:
>>> 'ß'.swapcase().swapcase()
'ss'
Run Code Online (Sandbox Code Playgroud)
困惑?德语辅音ß(发音为[s])SS在一次申请之后swapcase,然后ss在第二次之后.
这是他们的整个列表(→代表一个swapcase):
µ (0xb5) ? ? (0x39c) ? ? (0x3bc) ? ? (0x39c)
ß (0xdf) ? SS (0x5353) ? ss (0x7373) ? SS (0x5353)
? (0x130) ? i? (0x69307) ? I? (0x49307) ? i? (0x69307)
? (0x131) ? I (0x49) ? i (0x69) ? I (0x49)
? (0x149) ? ?N (0x2bc4e) ? ?n (0x2bc6e) ? ?N (0x2bc4e)
? (0x17f) ? S (0x53) ? s (0x73) ? S (0x53)
? (0x1f0) ? J? (0x4a30c) ? j? (0x6a30c) ? J? (0x4a30c)
? (0x345) ? ? (0x399) ? ? (0x3b9) ? ? (0x399)
? (0x390) ? ??? (0x399308301) ? ??? (0x3b9308301) ? ??? (0x399308301)
? (0x3b0) ? ??? (0x3a5308301) ? ??? (0x3c5308301) ? ??? (0x3a5308301)
? (0x3c2) ? ? (0x3a3) ? ? (0x3c3) ? ? (0x3a3)
? (0x3d0) ? ? (0x392) ? ? (0x3b2) ? ? (0x392)
? (0x3d1) ? ? (0x398) ? ? (0x3b8) ? ? (0x398)
? (0x3d5) ? ? (0x3a6) ? ? (0x3c6) ? ? (0x3a6)
? (0x3d6) ? ? (0x3a0) ? ? (0x3c0) ? ? (0x3a0)
? (0x3f0) ? ? (0x39a) ? ? (0x3ba) ? ? (0x39a)
? (0x3f1) ? ? (0x3a1) ? ? (0x3c1) ? ? (0x3a1)
? (0x3f4) ? ? (0x3b8) ? ? (0x398) ? ? (0x3b8)
? (0x3f5) ? ? (0x395) ? ? (0x3b5) ? ? (0x395)
? (0x587) ? ?? (0x535552) ? ?? (0x565582) ? ?? (0x535552)
? (0x1e96) ? H? (0x48331) ? h? (0x68331) ? H? (0x48331)
? (0x1e97) ? T? (0x54308) ? t? (0x74308) ? T? (0x54308)
? (0x1e98) ? W? (0x5730a) ? w? (0x7730a) ? W? (0x5730a)
? (0x1e99) ? Y? (0x5930a) ? y? (0x7930a) ? Y? (0x5930a)
? (0x1e9a) ? A? (0x412be) ? a? (0x612be) ? A? (0x412be)
? (0x1e9b) ? ? (0x1e60) ? ? (0x1e61) ? ? (0x1e60)
? (0x1e9e) ? ß (0xdf) ? SS (0x5353) ? ss (0x7373) ? SS (0x5353)
? (0x1f50) ? ?? (0x3a5313) ? ?? (0x3c5313) ? ?? (0x3a5313)
? (0x1f52) ? ??? (0x3a5313300) ? ??? (0x3c5313300) ? ??? (0x3a5313300)
? (0x1f54) ? ??? (0x3a5313301) ? ??? (0x3c5313301) ? ??? (0x3a5313301)
? (0x1f56) ? ??? (0x3a5313342) ? ??? (0x3c5313342) ? ??? (0x3a5313342)
? (0x1f80) ? ?? (0x1f08399) ? ?? (0x1f003b9) ? ?? (0x1f08399)
? (0x1f81) ? ?? (0x1f09399) ? ?? (0x1f013b9) ? ?? (0x1f09399)
? (0x1f82) ? ?? (0x1f0a399) ? ?? (0x1f023b9) ? ?? (0x1f0a399)
? (0x1f83) ? ?? (0x1f0b399) ? ?? (0x1f033b9) ? ?? (0x1f0b399)
? (0x1f84) ? ?? (0x1f0c399) ? ?? (0x1f043b9) ? ?? (0x1f0c399)
? (0x1f85) ? ?? (0x1f0d399) ? ?? (0x1f053b9) ? ?? (0x1f0d399)
? (0x1f86) ? ?? (0x1f0e399) ? ?? (0x1f063b9) ? ?? (0x1f0e399)
? (0x1f87) ? ?? (0x1f0f399) ? ?? (0x1f073b9) ? ?? (0x1f0f399)
? (0x1f90) ? ?? (0x1f28399) ? ?? (0x1f203b9) ? ?? (0x1f28399)
? (0x1f91) ? ?? (0x1f29399) ? ?? (0x1f213b9) ? ?? (0x1f29399)
? (0x1f92) ? ?? (0x1f2a399) ? ?? (0x1f223b9) ? ?? (0x1f2a399)
? (0x1f93) ? ?? (0x1f2b399) ? ?? (0x1f233b9) ? ?? (0x1f2b399)
? (0x1f94) ? ?? (0x1f2c399) ? ?? (0x1f243b9) ? ?? (0x1f2c399)
? (0x1f95) ? ?? (0x1f2d399) ? ?? (0x1f253b9) ? ?? (0x1f2d399)
? (0x1f96) ? ?? (0x1f2e399) ? ?? (0x1f263b9) ? ?? (0x1f2e399)
? (0x1f97) ? ?? (0x1f2f399) ? ?? (0x1f273b9) ? ?? (0x1f2f399)
? (0x1fa0) ? ?? (0x1f68399) ? ?? (0x1f603b9) ? ?? (0x1f68399)
? (0x1fa1) ? ?? (0x1f69399) ? ?? (0x1f613b9) ? ?? (0x1f69399)
? (0x1fa2) ? ?? (0x1f6a399) ? ?? (0x1f623b9) ? ?? (0x1f6a399)
? (0x1fa3) ? ?? (0x1f6b399) ? ?? (0x1f633b9) ? ?? (0x1f6b399)
? (0x1fa4) ? ?? (0x1f6c399) ? ?? (0x1f643b9) ? ?? (0x1f6c399)
? (0x1fa5) ? ?? (0x1f6d399) ? ?? (0x1f653b9) ? ?? (0x1f6d399)
? (0x1fa6) ? ?? (0x1f6e399) ? ?? (0x1f663b9) ? ?? (0x1f6e399)
? (0x1fa7) ? ?? (0x1f6f399) ? ?? (0x1f673b9) ? ?? (0x1f6f399)
? (0x1fb2) ? ?? (0x1fba399) ? ?? (0x1f703b9) ? ?? (0x1fba399)
? (0x1fb3) ? ?? (0x391399) ? ?? (0x3b13b9) ? ?? (0x391399)
? (0x1fb4) ? ?? (0x386399) ? ?? (0x3ac3b9) ? ?? (0x386399)
? (0x1fb6) ? ?? (0x391342) ? ?? (0x3b1342) ? ?? (0x391342)
? (0x1fb7) ? ??? (0x391342399) ? ??? (0x3b13423b9) ? ??? (0x391342399)
? (0x1fbe) ? ? (0x399) ? ? (0x3b9) ? ? (0x399)
? (0x1fc2) ? ?? (0x1fca399) ? ?? (0x1f743b9) ? ?? (0x1fca399)
? (0x1fc3) ? ?? (0x397399) ? ?? (0x3b73b9) ? ?? (0x397399)
? (0x1fc4) ? ?? (0x389399) ? ?? (0x3ae3b9) ? ?? (0x389399)
? (0x1fc6) ? ?? (0x397342) ? ?? (0x3b7342) ? ?? (0x397342)
? (0x1fc7) ? ??? (0x397342399) ? ??? (0x3b73423b9) ? ??? (0x397342399)
? (0x1fd2) ? ??? (0x399308300) ? ??? (0x3b9308300) ? ??? (0x399308300)
? (0x1fd3) ? ??? (0x399308301) ? ??? (0x3b9308301) ? ??? (0x399308301)
? (0x1fd6) ? ?? (0x399342) ? ?? (0x3b9342) ? ?? (0x399342)
? (0x1fd7) ? ??? (0x399308342) ? ??? (0x3b9308342) ? ??? (0x399308342)
? (0x1fe2) ? ??? (0x3a5308300) ? ??? (0x3c5308300) ? ??? (0x3a5308300)
? (0x1fe3) ? ??? (0x3a5308301) ? ??? (0x3c5308301) ? ??? (0x3a5308301)
? (0x1fe4) ? ?? (0x3a1313) ? ?? (0x3c1313) ? ?? (0x3a1313)
? (0x1fe6) ? ?? (0x3a5342) ? ?? (0x3c5342) ? ?? (0x3a5342)
? (0x1fe7) ? ??? (0x3a5308342) ? ??? (0x3c5308342) ? ??? (0x3a5308342)
? (0x1ff2) ? ?? (0x1ffa399) ? ?? (0x1f7c3b9) ? ?? (0x1ffa399)
? (0x1ff3) ? ?? (0x3a9399) ? ?? (0x3c93b9) ? ?? (0x3a9399)
? (0x1ff4) ? ?? (0x38f399) ? ?? (0x3ce3b9) ? ?? (0x38f399)
? (0x1ff6) ? ?? (0x3a9342) ? ?? (0x3c9342) ? ?? (0x3a9342)
? (0x1ff7) ? ??? (0x3a9342399) ? ??? (0x3c93423b9) ? ??? (0x3a9342399)
? (0x2126) ? ? (0x3c9) ? ? (0x3a9) ? ? (0x3c9)
? (0x212a) ? k (0x6b) ? K (0x4b) ? k (0x6b)
? (0x212b) ? å (0xe5) ? Å (0xc5) ? å (0xe5)
? (0xfb00) ? FF (0x4646) ? ff (0x6666) ? FF (0x4646)
? (0xfb01) ? FI (0x4649) ? fi (0x6669) ? FI (0x4649)
? (0xfb02) ? FL (0x464c) ? fl (0x666c) ? FL (0x464c)
? (0xfb03) ? FFI (0x464649) ? ffi (0x666669) ? FFI (0x464649)
? (0xfb04) ? FFL (0x46464c) ? ffl (0x66666c) ? FFL (0x46464c)
? (0xfb05) ? ST (0x5354) ? st (0x7374) ? ST (0x5354)
? (0xfb06) ? ST (0x5354) ? st (0x7374) ? ST (0x5354)
? (0xfb13) ? ?? (0x544546) ? ?? (0x574576) ? ?? (0x544546)
? (0xfb14) ? ?? (0x544535) ? ?? (0x574565) ? ?? (0x544535)
? (0xfb15) ? ?? (0x54453b) ? ?? (0x57456b) ? ?? (0x54453b)
? (0xfb16) ? ?? (0x54e546) ? ?? (0x57e576) ? ?? (0x54e546)
? (0xfb17) ? ?? (0x54453d) ? ?? (0x57456d) ? ?? (0x54453d)
Run Code Online (Sandbox Code Playgroud)
我试过这个
v = lambda x: x.swapcase().swapcase() == x
[unichr(x) for x in range(10000) if not v(unichr(x))]
Run Code Online (Sandbox Code Playgroud)
结果如下:
[u'\xb5', u'\u0130', u'\u0131', u'\u017f', u'\u03c2', u'\u03d0', u'\u03d1', u'\u03d5', u'\u03d6', u'\u03f0', u'\u03f1', u'\u03f4', u'\u03f5', u'\u1e9b', u'\u1e9e', u'\u1f80', u'\u1f81', u'\u1f82', u'\u1f83', u'\u1f84', u'\u1f85', u'\u1f86', u'\u1f87', u'\u1f90', u'\u1f91', u'\u1f92', u'\u1f93', u'\u1f94', u'\u1f95', u'\u1f96', u'\u1f97', u'\u1fa0', u'\u1fa1', u'\u1fa2', u'\u1fa3', u'\u1fa4', u'\u1fa5', u'\u1fa6', u'\u1fa7', u'\u1fb3', u'\u1fbe', u'\u1fc3', u'\u1ff3', u'\u2126', u'\u212a', u'\u212b']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
977 次 |
| 最近记录: |