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
...
我在 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
...