关于多变量使用的不确定性

时间:2014-09-04 16:25:44

标签: python python-2.7

我已经获得了以下代码

>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> params.items()
[('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')]

这是我感到困惑的部分。

我有k for kv

>>> [k for k, v in params.items()]  

['server', 'uid', 'database', 'pwd']

>>> [v for k, v in params.items()]
['mpilgrim', 'sa', 'master', 'secret']

我知道它是多变量的,但是当我将a的{​​{1}}和k的{​​{1}}更改为b时,它会给我{{1}作为错误。

我对多变量的理解是否遗漏了什么?

1 个答案:

答案 0 :(得分:1)

只要您保持一致,就可以选择用于列表推导的名称。以下工作完全相同

[ a for a, v in params.items() ]
[ k for k, v in params.items() ]

嗯,几乎一样。生成的列表将是相同的,但是在Python 3中改变了理解中的名称范围。在Python 2中,列表推导中使用的名称与调用代码的范围相同。

>>> a = 5
>>> [ a for a in range(3) ]
[0, 1, 2]
>>> a
2

在Python 3中,理解形成了一个新的范围,因此在理解中使用的名称是本地的。

>>> a = 5
>>> [ a for a in range(3) ]
[0, 1, 2]
>>> a
5