这三种变量赋值的区别
difference between these 3 types of variable assignments
在Python中,似乎我可以做以下3个变量赋值中的任何一个:
g = (3, 4, 5)
g = "(3, 4, 5)"
g = 3, 4, 5
其次是
print(g)
并且输出总是
(3, 4, 5)
那么,这3种变量赋值有什么区别呢?
- 第一个是三元素元组。
- 第二个是一些字符串。
- 第三个是相同的三元素元组,因为在这种情况下括号是多余的。
一小段代码就足以证明这一点:
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
综上所述,对象的字符串表示和对象属性是两个不同的概念。可能有多个具有相同字符串表示但行为不同的对象。
案例 #1 和案例 #3 都导致 tuple
,通过 expression_list 创建;可以将其括在[括号中],如您的案例#1,或不包括,如您的案例#3。 Python 中的某些操作允许语法(例如定义新的 tuple
或 for...in
循环),某些操作需要包含 expression_list
(例如 if
语句);在任何情况下,结果都是一个 tuple
对象。
案例 #2 显然是任何语言的 string
,包括 Python。 :)
在Python中,似乎我可以做以下3个变量赋值中的任何一个:
g = (3, 4, 5)
g = "(3, 4, 5)"
g = 3, 4, 5
其次是
print(g)
并且输出总是
(3, 4, 5)
那么,这3种变量赋值有什么区别呢?
- 第一个是三元素元组。
- 第二个是一些字符串。
- 第三个是相同的三元素元组,因为在这种情况下括号是多余的。
一小段代码就足以证明这一点:
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
综上所述,对象的字符串表示和对象属性是两个不同的概念。可能有多个具有相同字符串表示但行为不同的对象。
案例 #1 和案例 #3 都导致 tuple
,通过 expression_list 创建;可以将其括在[括号中],如您的案例#1,或不包括,如您的案例#3。 Python 中的某些操作允许语法(例如定义新的 tuple
或 for...in
循环),某些操作需要包含 expression_list
(例如 if
语句);在任何情况下,结果都是一个 tuple
对象。
案例 #2 显然是任何语言的 string
,包括 Python。 :)