【发布时间】:2016-09-06 13:31:48
【问题描述】:
在 Python 中,我似乎可以执行以下 3 种变量赋值中的任何一种:
g = (3, 4, 5)
g = "(3, 4, 5)"
g = 3, 4, 5
紧随其后
print(g)
输出总是
(3, 4, 5)
那么,这3种变量赋值有什么区别呢?
【问题讨论】:
-
1和3相同,2完全不同。
标签: python variable-assignment
在 Python 中,我似乎可以执行以下 3 种变量赋值中的任何一种:
g = (3, 4, 5)
g = "(3, 4, 5)"
g = 3, 4, 5
紧随其后
print(g)
输出总是
(3, 4, 5)
那么,这3种变量赋值有什么区别呢?
【问题讨论】:
标签: python variable-assignment
案例#1 和#3 都导致tuple,通过expression_list 创建;可以将其括在[括号中],如您的案例#1,或未封闭,如您的案例#3。 Python 中的某些操作允许使用任何一种语法(例如定义新的tuple,或for...in 循环),一些需要封闭的expression_list(例如if 语句);在任何情况下,结果都是tuple 对象。
案例#2 显然是任何语言的string,包括Python。 :)
【讨论】:
小代码sn-p就足以证明:
g1 = (3, 4, 5)
g2 = "(3, 4, 5)"
g3 = 3, 4, 5
type(g1) # <type 'tuple'>
type(g2) # <type 'str'>
type(g3) # <type 'tuple'>
g1 == g3 # True
g1 == g2 # False
g2 == g3 # False
g1[0] # 3, first element of tuple, type: int
g2[0] # "(", first char of string, type: str
综上所述,对象的字符串表示和对象的属性是两个不同的概念。可能有多个对象具有相同的字符串表示但不同的行为。
【讨论】:
print(repr(g)) 将产生不同的结果 2。