为什么新变量名需要在等号(=)的左边?
Why do new variable names need to be on the left of the equals (=)?
我很好奇为什么某种格式会产生错误而另一种格式却不会。
有效代码:
name = input().split()
if len(name) == 3:
first_name, middle_name, last_name = name
print(f'{last_name}, {first_name[0]}.{middle_name[0]}.')
elif len(name) == 2:
first_name, last_name = name
print(f'{last_name}, {first_name[0]}.')
无效的代码:
name = input().split()
if len(name) == 3:
name= first_name, middle_name, last_name
print(f'{last_name}, {first_name[0]}.{middle_name[0]}.')
elif len(name) == 2:
name = first_name, last_name
print(f'{last_name}, {first_name[0]}.')
这两行的唯一区别在于第 4 行和第 8 行,其中 name =
最终出现了。我总是把变量放在左边,所以我不知道为什么它需要放在右边。
谢谢!
他们说的是完全不同的两件事。第二个获取三个对象(first_name、middle_name、last_name),然后将它们构建成一个元组,并将其分配给 name
。这显然不是您想要的,因为这三个名称不存在。您的第一个示例采用变量 name
(确实存在)的三个部分,并将它们解压缩到这三个对象中。您的第二个示例不是您编写赋值语句的方式。赋值将右侧的内容分配给左侧的内容。
毕竟,你写:
num = 3
而不是
3 = num
对吗?
如果您是编程新手或者您更熟悉数学符号,=
的概念可能会造成混淆,因为它实际上并不是 等价 ,更像是命名。当您编写 name = value
形式的语句时,例如 foo = 0
,这意味着“获取值 0
并将其存储在名称 foo
下”。如果有助于您的理解,您可以将 name
视为标签。
在您的情况下,您希望从列表 name
中取出字符串并将它们分别存储在标签 first_name
、可能 middle_name
和 last_name
下.为了演示,假设 name
是 ['John', 'Doe']
。这意味着您要将 'John'
存储在 first_name
下,将 'Doe'
存储在 last_name
下。所以你怎么做就是写,
first_name, last_name = name
如果我们用它引用的值替换name
,它变得更清楚:
first_name, last_name = ['John', 'Doe']
然后 Python 解包 列表,这等同于:
first_name = 'John'
last_name = 'Doe'
作为参考,Python 语言参考中解释了确切的语义:Assignment statements。 (语法上,target_list
有多个targets
,都是identifier
,RHS是一个starred_expression
,归结为primary
-> atom
-> identifier
.)
我很好奇为什么某种格式会产生错误而另一种格式却不会。
有效代码:
name = input().split()
if len(name) == 3:
first_name, middle_name, last_name = name
print(f'{last_name}, {first_name[0]}.{middle_name[0]}.')
elif len(name) == 2:
first_name, last_name = name
print(f'{last_name}, {first_name[0]}.')
无效的代码:
name = input().split()
if len(name) == 3:
name= first_name, middle_name, last_name
print(f'{last_name}, {first_name[0]}.{middle_name[0]}.')
elif len(name) == 2:
name = first_name, last_name
print(f'{last_name}, {first_name[0]}.')
这两行的唯一区别在于第 4 行和第 8 行,其中 name =
最终出现了。我总是把变量放在左边,所以我不知道为什么它需要放在右边。
谢谢!
他们说的是完全不同的两件事。第二个获取三个对象(first_name、middle_name、last_name),然后将它们构建成一个元组,并将其分配给 name
。这显然不是您想要的,因为这三个名称不存在。您的第一个示例采用变量 name
(确实存在)的三个部分,并将它们解压缩到这三个对象中。您的第二个示例不是您编写赋值语句的方式。赋值将右侧的内容分配给左侧的内容。
毕竟,你写:
num = 3
而不是
3 = num
对吗?
如果您是编程新手或者您更熟悉数学符号,=
的概念可能会造成混淆,因为它实际上并不是 等价 ,更像是命名。当您编写 name = value
形式的语句时,例如 foo = 0
,这意味着“获取值 0
并将其存储在名称 foo
下”。如果有助于您的理解,您可以将 name
视为标签。
在您的情况下,您希望从列表 name
中取出字符串并将它们分别存储在标签 first_name
、可能 middle_name
和 last_name
下.为了演示,假设 name
是 ['John', 'Doe']
。这意味着您要将 'John'
存储在 first_name
下,将 'Doe'
存储在 last_name
下。所以你怎么做就是写,
first_name, last_name = name
如果我们用它引用的值替换name
,它变得更清楚:
first_name, last_name = ['John', 'Doe']
然后 Python 解包 列表,这等同于:
first_name = 'John'
last_name = 'Doe'
作为参考,Python 语言参考中解释了确切的语义:Assignment statements。 (语法上,target_list
有多个targets
,都是identifier
,RHS是一个starred_expression
,归结为primary
-> atom
-> identifier
.)