2016-02-20 26 views
2

我有一个python单位包。我想有两个Åangstrom是埃两个别名,所以人们可以用任何他们喜欢的一个(Å更容易阅读,但angstrom是更容易输入)。由于统一标识符forbidden in Python 2,该Å选项显然只能在Python提供3.我的问题是:有没有办法有两个Python 2和Python 3中工作的单个源文件,并具有在Python 3中定义这个变量只要?unicode标识符而不牺牲python 2兼容性

天真的解决方案if sys.version_info >= (3,): Å = angstrom不起作用,因为Python 2引发一个语法错误。

+0

没有测试过,但你可以将其隐藏在'exec'。 – tzaman

+1

'globals()['Å'] = angstrom'。你可能甚至不需要你的那个'sys.version_info'。 – mgilson

+1

有趣的想法。 。 。 – mgilson

回答

3

通常情况下,我不鼓励比变量名ASCII字符以外的任何...然而,这是一个有趣的想法,因为埃符号实际有它的标准含义在此背景下,所以我想我冷静了它这次 :-)。

我想你应该能够做到这一点:

globals()['Å'] = angstrom 

,这将在两个python2.x和python3.x“工作”。当然,你的python2.x用户将无法在他们的代码中引用它,而不会恢复到像getattr(units, 'Å')这样的奇怪黑客,但它不会抛出一个错误,这是问题的重点(我认为)。