|  | 
 
| 
本帖最后由 sunrise085 于 2020-4-3 19:36 编辑
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 前几天学习了一下python中字符串的方法,,发现字符串的处理方法真的蛮多的,小甲鱼整理的很很好。各种方法及注释见帖子。
 在帖子中介绍了各种方法并加上了注释,然而又一些极为相似的方法,可能有些鱼油们会弄不清楚,我刚开始的时候也不清楚,然后就查阅资料,并亲自测试,现在总结如下,希望对广大鱼油们有所帮助。
 第一组:isdecimal()、isdigit()和isnumeric()
 这三个方法基本上都是判断字符串中是否只包含数字,但是却不尽相同。小甲鱼给出的注释如下:
 isdecimal()        如果字符串只包含十进制数字则返回 True,否则返回 False。
 isdigit()        如果字符串只包含数字则返回 True,否则返回 False。
 isnumeric()        如果字符串中只包含数字字符,则返回 True,否则返回 False。
 注释中的差别是:十进制数字、数字、数字字符。
 就这么看,还真有点晕了。第一个好一些,限定了十进制,后面两个差别是啥啊?字符串中不都是字符吗?什么是数字,什么是数字字符?是不是一头雾水?
 我来为大家解惑:
 isdecimal()
 True: Unicode数字,,全角数字(双字节)
 False: 罗马数字,汉字数字
 Error: byte数字(单字节)
 
 isdigit()
 True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字
 False: 汉字数字
 Error: 无
 
 isnumeric()
 True: Unicode数字,全角数字(双字节),罗马数字,汉字数字
 False: 无
 Error: byte数字(单字节)
 举个例子:
 
 复制代码str1='Ⅷ'#罗马数字
print(str1,str1.isdecimal())
print(str1,str1.isdigit())
print(str1,str1.isnumeric())
print()
str2='五'
print(str2,str2.isdecimal())
print(str2,str2.isdigit())
print(str2,str2.isnumeric())
print()
str3=b'10010'#二进制
#print(str3,str3.isdecimal()) #这里是会报错的
print(str3,str3.isdigit())
#print(str3,str3.isnumeric())#这里是会报错的
print()
str4='123'#全角字符
print(str4,str4.isdecimal())
print(str4,str4.isdigit())
print(str4,str4.isnumeric())
程序输出结果如下:
 
 复制代码Ⅷ False
Ⅷ False
Ⅷ True
五 False
五 False
五 True
b'10010' True
123
123 True
123 True
123 True
 第二组:casefold()和lower()
 这两个方法都是大写转小写,小甲鱼中给出的注释如下:
 casefold()        把整个字符串的所有字符改为小写
 lower()        转换字符串中所有大写字符为小写
 字面区别,一个是将所有字符改为小写,一个是将大写字符改为小写。听起来,好像第一个的功能更强大一些,但是小写字符也不需要改啊。这样想的话,两个方法意思不是一样的么?
 其实,这两个方法是有区别的。查资料得到的是一下解释。lower()方法只能将ASCII码中的0x41到0x5a转换为0x61到0x7a,即将'A-Z'转换为'a-z',对其他字符无效;而casefold()可以将所有的有大小写区分的字符都进行转换,比如德语中的'ß'等。
 我查了一下德语中的'ß',在德语中该字母本身是小写,所以lower()函数对其无效,而该字母还有其小写,即'ss',因此casefold()能对其进行转换。
 此外我进行了一些其他语系字母的尝试,发现lower()函数不单单能转换'A-Z',还可以转换俄文字母和希腊字母等其他语系字母。
 下面是我的一些尝试。
 
 复制代码str1='"ß"'
print(str1,'使用casefold转换',str1.casefold())
print(str1,'使用lower转换',str1.lower())
print()
str2='"AB   T Ф Φ Β Ε Ω  Π  Δ Σ"'
print(str2,'\n使用casefold转换\n',str2.casefold())
print('使用lower转换\n',str2.lower())
程序结果
 
 复制代码"ß" 使用casefold转换 "ss"
"ß" 使用lower转换 "ß"
"AB   T Ф Φ Β Ε Ω  Π  Δ Σ" 
使用casefold转换
 "ab   t ф φ β ε ω  π  δ σ"
使用lower转换
 "ab   t ф φ β ε ω  π  δ σ"
这是自己学习过程中的一些总结,拿出来和大家交流交流,希望大家多多讨论,共同进步。
 
 
 PS:发帖几个小时之后,才发现有些语系的字母无法正常显示,包括德语中的那个字母,和β有点相似,想了解的可以自己去搜一下“德语字母β”,还有一些其他的字母无法显示,我就删除了
 | 
 评分
查看全部评分
 |