我正在关注Zed Shaw的“艰难地学习Python,第三版”
以下是本书练习39中的一个小代码示例:
states = {
'Oregon': 'OR',
'Florida': 'FL',
'California': 'CA',
'New York': 'NY',
'Michigan': 'MI' }
for state, abbrev in states.items():
print "%s is abbreviated %s" % (state, abbrev)
print "-" * 10
for abbrev, state in states.items():
print "%s is abbreviated %s" % (abbrev, state)
上述程序的输出为:
^{pr2}$在代码中,没有告诉python什么是状态,什么是缩写。 我的问题是:为什么两个print语句都打印相同? 即使我在第二个for循环中颠倒顺序,python如何显示适当的“state”和“abrevision”?在
注:谢谢你的回答。Stackoverflow告诉我,为了给我的问题添加任何内容,我应该编辑问题,而不是添加新的注释。。。。在
字典不是对称的;有一个
key
和一个value
,并且角色是不可逆的。在函数
items()
返回元组集合,其中第一个元素是键,第二个元素是值。在第二个循环中,您颠倒了键和值的名称,但变量的名称在程序之外并不重要。在在第一个例子中,你在说}。当你说
state, abbrev
,然后你又在叫{state
时,你是说那是键,然后缩写是值(字典的键值对)。然后当您调用打印行时,它的键在前,值在后。在在第二节中,您只是切换了state和abbrev的顺序。程序不知道state是表示状态的全名还是缩写(反之亦然),只知道其中一个是键,另一个是值。在
所以回顾一下:
在第一节中,键是state,值是abbrev。在第二部分,它是相反的。在
如果将变量名更改为a,b,然后b,a,它将执行相同的操作:
.items()
接受每个键值对并将其作为元组返回。a,b
称为tuple unpacking。它接受元组的每个成员,并将其分配给一个单独的变量。在所以你称这些变量为什么并不重要,因为
.items()
总是返回一个key,value
对,,并且它总是按这个顺序。在要先写缩写,只需切换print语句中变量的顺序即可:
^{pr2}$相关问题 更多 >
编程相关推荐