关于python中

时间:2016-01-11 16:38:38

标签: python environment-variables

我在麻省理工学院6.006“算法入门”课程的一些示例代码中找出环境变量的使用时遇到了一些麻烦。

我刚刚完成了问题集3,在查看解决方案(找到here)时,代码使用这种语法来更改变量名称:

if sys.version_info >= (3,):
    xrange = range

这非常有意义,因为在python 3中,range == xrange

但是,稍后在解决方案块中,他们最终定义了不同的类来覆盖现有的类。这里的细节并不太重要,但基本上当他们这样做时,他们会输入一个'if'语句来将一个Class实现更改为另一个。例如,他们创建一个基于数组的范围索引“BlitRangeIndex”来覆盖“RangeIndex”:

if os.environ.get('INDEX') == 'blit':
  RangeIndex = BlitRangeIndex

但是,我不明白变量“INDEX”是如何被置于环境变量中的。代码中没有任何迹象表明这种情况发生过,所以我不明白'if'语句是如何被评估为真的。

任何见解都会很棒!我还在学习很多关于python的内部工作原理,而我似乎无法想出这一点。

1 个答案:

答案 0 :(得分:1)

它只是假设您在运行程序之前设置了环境变量。 例如,在Linux环境中,您可以执行以下操作:

$ export INDEX=value 
$ export CROSS=value 
$ export TRACE=value
$ python path/to/full_circuit2.py 

但是,如果您愿意,可以通过常量覆盖这些变量,如下所示:

#!/usr/bin/env python

INDEX='value'
CROSS='value' 
TRACE='value'

...

您甚至可以通过命令行参数传递值:

#!/usr/bin/env python

import sys  
# other imports... 

INDEX = sys.argv[1]
CROSS = sys.argv[2]
TRACE = sys.argv[3]

...

if INDEX == 'blit': # instead if os.environ.get('INDEX')
  RangeIndex = BlitRangeIndex

...