鱼C论坛

 找回密码
 立即注册
查看: 1721|回复: 1

[技术交流] python细节之1、字符串方法中功能相近的方法辨析

[复制链接]
发表于 2018-12-26 17:22:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 sunrise085 于 2020-4-3 19:36 编辑

前几天学习了一下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:发帖几个小时之后,才发现有些语系的字母无法正常显示,包括德语中的那个字母,和β有点相似,想了解的可以自己去搜一下“德语字母β”,还有一些其他的字母无法显示,我就删除了

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
是尘埃呀 + 5 + 5 + 2 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-26 17:46:28 From FishC Mobile | 显示全部楼层
总结的很好,支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 07:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表