python 中对环境变量的困惑

Confusion about environmental variables in python

我在 MIT 6.006 'Intro to algorithms' 课程之一的示例代码中弄清楚环境变量的使用有点困难。

我刚刚完成问题集 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' 语句如何被评估为 true。

任何见解都会很棒!我仍在学习很多关于 python 的内部工作原理,但我似乎无法弄清楚这一点。

它只是假定您在 运行 程序之前设置了环境变量。 例如,在 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

...