我在麻省理工学院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的内部工作原理,而我似乎无法想出这一点。
答案 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
...