Python: string.uppercase与string.ascii_uppercase比较

13 投票
3 回答
16640 浏览
提问于 2025-04-16 11:30

这可能是个傻问题,但我不太明白在字符串模块里,string.uppercase和string.ascii_uppercase有什么区别。打印这两个函数的文档字符串,结果是一样的。即使是print string.uppercaseprint string.ascii_uppercase的输出也是一样的。

谢谢。

3 个回答

-2

在Python 3.x中,没有string.uppercasestring.ascii_uppercase这两个功能。不过,我们可以通过使用[:upper:]这个来自regex包的功能来实现类似的效果。如果你加上regex.UNICODE,就能让它更像string.uppercase,也就是说,它可以处理任何语言的大小写字母,而不仅仅是当前的语言环境。

11

注意,在Python 3.x中,字符串的大写字母(string.uppercase)、小写字母(string.lowercase)和字母(string.letters)都不见了。这是因为在不同地区使用时,这些“常量”会变化,并不被认为是一个好的做法。(详细信息可以查看这里

所以,对于任何新的代码来说,最好假装在Python 2.x中它们也不存在。这样的话,如果将来需要迁移到Python 3.x,就不会遇到麻烦了。

26

对于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)

撰写回答