ab.py
from ddr import Options
debugElmo = int(Options.env['GG_DEBUG_ELMO'])
postdevElmo = int(Options.env['GG_POST_DEV_ELMO'])
Options.py
vars_of_interest = (
'AA_PYTHON',
'GG_POST_DEV_ELMO',
'GG_DEBUG_ELMO',
)
env = dict((var, os.getenv(var, 0)) for var in vars_of_interest)
我不确定env = dict((var, os.getenv(var, 0)) for var in vars_of_interest)
发生了什么,因为我对python
在Options.py中使用python中的函数?
什么是dict()?
var是int(Options.env['GG_DEBUG_ELMO'])
的变量吗?
答案 0 :(得分:6)
您可以通过查看Python解释器中的各个部分来了解Python代码的作用:
>>> vars_of_interest
('AA_PYTHON', 'GG_POST_DEV_ELMO', 'GG_DEBUG_ELMO')
>>> import os
>>> [(var, os.getenv(var, 0)) for var in vars_of_interest]
[('AA_PYTHON', 0), ('GG_POST_DEV_ELMO', 0), ('GG_DEBUG_ELMO', 0)]
>>> env = dict((var, os.getenv(var, 0)) for var in vars_of_interest)
>>> env
{'AA_PYTHON': 0, 'GG_DEBUG_ELMO': 0, 'GG_POST_DEV_ELMO': 0}
env = dict(...)
使env
成为dict
。如果您不确定对象是什么,您可以随时询问它的类型:
>>> type(env)
dict
dict
是键和值之间的映射。
在这种情况下,env
是'AA_PYTHON'
等字符串与0
等值之间的映射。
((var, os.getenv(var, 0)) for var in vars_of_interest)
生成器表达式中的for var in vars_of_interest
告诉Python迭代元组vars_of_interest
中的项,并在迭代循环时逐个将值分配给var
。
生成器表达式是一个迭代器。迭代器为每个(var, os.getenv(var, 0))
生成var
的值。
表达式(var, os.getenv(var, 0))
是一个可以被认为是键值对的元组。 var
是关键,os.getenv(var, 0)
是值。 os.getenv查找环境变量var
(例如'AA_PYTHON'
)并返回环境变量的值(如果存在),否则返回0.
当dict
传递一个键值对的迭代器时,正如在表达式中所做的那样
dict((var, os.getenv(var, 0)) for var in vars_of_interest)
它返回一个dict
,它将给定的键映射到给定的值。
请参阅此处查看more information on Python dicts。
答案 1 :(得分:3)
第二个示例使用列表推导创建名为env
的字典。
什么是字典?这是一个关联列表。想到字典的一种方法是它们就像数组一样,除了它们不是被数字索引而是被其他东西索引。在这种情况下,它们由字符串索引,即环境变量的名称。
什么是列表理解?这是一种创建列表的方法。由列表推导创建的列表是对列表,环境变量名称和该环境变量的值。内置函数dict
从这样的对列表中创建一个字典。