【问题标题】:difference between these 3 types of variable assignments这3种变量赋值的区别
【发布时间】: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


【解决方案1】:

案例#1 和#3 都导致tuple,通过expression_list 创建;可以将其括在[括号中],如您的案例#1,或未封闭,如您的案例#3。 Python 中的某些操作允许使用任何一种语法(例如定义新的tuple,或for...in 循环),一些需要封闭的expression_list(例如if 语句);在任何情况下,结果都是tuple 对象。

案例#2 显然是任何语言的string,包括Python。 :)

【讨论】:

    【解决方案2】:
    • 第一个是三元素元组。
    • 第二个是一些字符串。
    • 第三个是相同的三元素元组,因为在这种情况下括号是多余的。

    小代码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。
    猜你喜欢
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2023-04-06
    • 2010-10-01
    • 2012-08-30
    • 2021-10-06
    相关资源
    最近更新 更多