【问题标题】:Python - Assigning 2 variables from one stringPython - 从一个字符串中分配 2 个变量
【发布时间】:2014-01-08 05:09:00
【问题描述】:

values 是一个数组; eventTokens 是一个字符串(值的第一个元素)。双重分配有什么作用? (eventToken1 & eventToken2的值是多少?)

values = data.split("\x01")

eventTokens = values.pop(0)
eventToken1, eventToken2 = eventTokens

我完成了一个输出任务(在 Python 源代码上),结果如下:

eventTokens is →☹
eventToken1 is →
eventToken2 is ☹

我得出结论,变量以某种方式拆分了初始字符串。但是,如果我尝试编译(显然)类似的东西:

arr = ["some", "elements", "inarray"]
c = arr.pop(0)
a, b = c
print c
print a
print b

导致异常:ValueError: too many values to unpack .

注意:print在测试环境中不是参数化方法

【问题讨论】:

    标签: python arrays variable-assignment


    【解决方案1】:

    c = arr.pop(0) 在此处返回 "some",但您尝试在此步骤中将值分配给 2 个变量(其中有 4 个文字)因此,a, b = c 失败。

    试试这个

    arr = ["some", "elements", "inarray"]
    c = arr.pop(0)
    a, b = arr
    print c
    print a
    print b
    

    【讨论】:

    • 这个答案不正确。您收到“太多值无法解包”错误的原因是因为 c 有四个字符,而您正试图将其解包为两个变量。 a, b, d, e = c 会起作用。
    • @Jimothy 我相信 OP 想要 a, b = arr 而不是 a, b = c ,所以 this 示例有效
    • 你是对的。我应该说你对为什么a, b = c 给出错误的解释是不正确的。
    • @Jimothy 谢谢。已纠正。
    【解决方案2】:

    变量解包是 Python 在一行中进行多个变量赋值的能力。约束是表达式右侧的可迭代对象必须与左侧变量的长度相同。否则你会得到一个too manyto little values to unpack 异常。

    如果你有一个大小为 2 的字符串,如 eventTokens 应该是,那么你可以:

    >>>a,b = 'ab'
    >>>a
    'a'
    >>>b
    'b'
    

    这是非常不安全的代码。如果eventTokens 以某种方式增长到大于两个元素,则代码将引发异常,您的程序将被关闭。

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      由于eventTokens是长度为2的字符串,所以可以解包成两个单字符串:

      >>> a, b = 'ab'
      >>> a
      'a'
      >>> b
      'b'
      

      但是,字符串中的字符数必须与解压到的变量数相匹配:

      >>> a, b = 'abcd'
      ValueError: too many values to unpack
      

      注意你可以解压成一个变量!

      >>> a, = 'x'
      >>> a
      'x'
      >>> a, = 'xyz'
      ValueError: too many values to unpack
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多