2013-04-24 68 views
6

今天我遇到了一个奇怪的问题。我使用Python标准库的string模块的letters变量,并注意到bpython中的结果与香草python中的结果不同。为什么python和bpython之间的string.letters不同?

我使用Python 2.7.3和bpython 0.10.1和virtualenv 1.8.4。这是我所看到的。

$ bpython 
>>> import string 
>>> string.letters 
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 


$ python 
>>> import string 
>>> string.letters 
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 

我不知道它的问题,但我在xubuntu 12.10上运行这个。

有人能解释一下这里发生了什么吗?

+0

我的猜测是他们只是不同的实现,其中一个说'string.letters = string.ascii_upper + string.ascii_lower',另一个'string.letters = string.ascii_lower + string.ascii_upper',我不认为它会对你的程序有任何影响(除非你正在尝试执行'string.letters [:26]'或其他什么) – 2013-04-24 15:48:10

+0

这很奇怪:使用'string.letters'我得到和你一样的结果,但是使用'string。 ascii_letters'我在python和bpython中都得到'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ''。 – dusan 2013-04-24 17:16:32

回答

4

docs,string.letters被定义为

的字符串的串联小写和大写下面描述 。具体值取决于语言环境,当locale.setlocale()被调用时将会更新 。

所以它可能是你的区域设置不同。

+4

我想这可能是正确的:'bpython'显示'('en_US','UTF-8')的'locale'','python'显示'(locale)'(None,None)' – 2013-04-24 14:58:40

+0

该区域似乎不会影响它。我将'python' repl中的语言环境改为'('en_US','UTF-8')'和'string.letters'是一样的。 – 2013-04-24 15:04:11

相关问题