2013-04-24 18 views
6

Ich lief heute in ein seltsames Problem. Ich benutzte string die letters Variable der Python-Standardbibliothek und bemerkte, dass das Ergebnis in bpython nicht das selbe wie das Ergebnis in Vanillepython war.Warum unterscheidet sich string.letters zwischen Python und bpython?

Ich benutze Python 2.7.3 und bpython 0.10.1 und virtualenv 1.8.4. Hier ist was ich sehe.

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


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

Ich bin nicht sicher, dass es wichtig ist, aber ich bin dies auf xubuntu 12.10 läuft.

Kann mir bitte jemand erklären, was hier vor sich geht?

+0

meine Vermutung ist, dass sie nur verschiedene Implementierungen sind, in denen eine sagte "string.letters = string.ascii_upper + string.ascii_lower" und die andere tat "string.letters = string.ascii_lower + string.ascii_upper", ich glaube nicht, dass es Haben Sie irgendwelche Auswirkungen auf eines Ihrer Programme (es sei denn, Sie versuchen, 'string.letters [: 26]' oder etwas) –

+0

Das ist seltsam: mit 'string.letters' Ich bekomme die gleichen Ergebnisse wie Sie, aber mit' string. ascii_letters' Ich erhalte '' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'' sowohl in python als auch in bpython. – dusan

Antwort

4

Vom docs wird definiert als string.letters

Die Verkettung des Strings Klein- und Groß beschrieben unten. Der spezifische Wert ist Gebietsschema-abhängig und wird aktualisiert, wenn locale.setlocale() aufgerufen wird .

So könnte es sein, dass Ihr Gebietsschema anders ist.

+4

Ich denke, das könnte richtig sein: 'bpython' zeigt ein' locale' von '('en_US', 'UTF-8')' und 'python' zeigt ein' locale' von '(None, None)' –

+0

Es schaltet sich um aus, dass das Gebietsschema es nicht zu beeinflussen scheint. Ich änderte das Gebietsschema im 'python' repl in' ('en_US', 'UTF-8') 'und' string.letters' war dasselbe. –

Verwandte Themen