Python: string.uppercase与string.ascii_uppercase比较
这可能是个傻问题,但我不太明白在字符串模块里,string.uppercase和string.ascii_uppercase有什么区别。打印这两个函数的文档字符串,结果是一样的。即使是print string.uppercase
和print string.ascii_uppercase
的输出也是一样的。
谢谢。
3 个回答
在Python 3.x中,没有string.uppercase
或string.ascii_uppercase
这两个功能。不过,我们可以通过使用[:upper:]
这个来自regex包的功能来实现类似的效果。如果你加上regex.UNICODE
,就能让它更像string.uppercase
,也就是说,它可以处理任何语言的大小写字母,而不仅仅是当前的语言环境。
注意,在Python 3.x中,字符串的大写字母(string.uppercase)、小写字母(string.lowercase)和字母(string.letters)都不见了。这是因为在不同地区使用时,这些“常量”会变化,并不被认为是一个好的做法。(详细信息可以查看这里)
所以,对于任何新的代码来说,最好假装在Python 2.x中它们也不存在。这样的话,如果将来需要迁移到Python 3.x,就不会遇到麻烦了。
对于Python 2.7,主要的区别在于: (查看 https://docs.python.org/2.7/library/string.html)
string.ascii_uppercase:
- 包含大写字母 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。这个值是固定的,不会因为地区不同而改变。
string.uppercase:
- 包含所有被认为是大写字母的字符。在大多数系统上,这个字符串是 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。不过这个值会根据地区的不同而变化,当你调用 locale.setlocale() 时,它会更新。
在Python 3及以上版本中,string.uppercase
不再作为全局的“常量”存在了。 ( https://docs.python.org/3/library/string.html)