理解python代码

时间:2013-06-27 19:56:39

标签: python

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'])的变量吗?

2 个答案:

答案 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等值之间的映射。

vargenerator expression

中使用的临时变量
((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从这样的对列表中创建一个字典。