我想制作一个名称/号码
的电话簿字典我输入以下代码,但似乎输入是从右到左读取的
widget.winfo_class()
e.g。如果我输入:
萨米 123
创建以下字典:
p = {}
p[raw_input()] = raw_input()
print p
任何人都知道为什么会这样吗?
答案 0 :(得分:0)
首先评估赋值运算符的右侧,然后评估左侧的表达式以选择存储值的位置。
来自Python docs:
赋值语句计算表达式列表(请记住,这可以是单个表达式或以逗号分隔的列表,后者产生元组)并将单个结果对象从左到右分配给每个目标列表。
这里,“表达列表”是右侧,而“目标列表”是左侧。 (因为像a, b = 1, 2
这样的赋值在Python中是有效的。)在这种情况下,将其视为“表达式”和“目标”更容易。
遵循这些规则,如果我从:
开始 p[raw_input()] = raw_input()
我首先评估“表达式列表”(右侧,raw_input()
,此时用户输入'sami'),此时我实际上有:
p[raw_input()] =
的 'sami'
强>
左侧(“目标列表”)是subscription; docs tell us:
如果目标是订阅:评估引用中的主表达式。它应该产生可变序列对象(例如列表)或映射对象(例如字典)。接下来,评估下标表达式。
所以,我首先评估引用中的“主要表达式”(仅p
):
<强> p
强> [raw_input()] =
的 'sami'
强>
然后再次评估“下标表达式”(raw_input()
,用户类型123):
<强> 现在可以完成作业,从而产生包含p
强> [
的 '123'
强> ] =
的 'sami'
强> < / p>
{ '123': 'sami' }