【问题标题】:Why python shell only allows `print` to output unpacked - python为什么python shell只允许`print`解压输出 - python
【发布时间】:2018-09-16 00:41:46
【问题描述】:

基本上我的标题是问题:

例子:

>>> l=[1,2,3]
>>> *l
SyntaxError: can't use starred expression here
>>> print(*l)
1 2 3
>>> 

为什么会这样???

【问题讨论】:

  • 我不知道是否确实如此,因为例如*L, 将输出元组,但我必须进一步研究语法。也相关:stackoverflow.com/questions/40676085/…
  • 你到底有什么不明白的? *L 不是有效的表达式。它充其量是不完整的。你期望*L做什么?

标签: python python-3.x printing


【解决方案1】:

因为它相当于列表对应的位置参数,所以当你不在可以接受所有参数的地方调用它时,这是没有意义的,因为没有地方可以放置参数

f.x.

print(*[1,2,3])
# is the same as
print(1,2,3)

*[1,2,3]
#is the same as - and do not think of it as a tuple
1,2,3 # here how ever that makes it a tuple since tuples not defined by the parenthasies, but the point is the same

然而,从 python 3.5 开始,在元组、列表、集合和字典中有一个轻微的例外,但这是一个例外,也可以用来分配剩余的值,python 怎么能看到你做的非其中。

编辑 我取消了我的答案,因为我意识到只有最后一部分是错误的。

【讨论】:

  • 我认为repr 与此无关。 REPL 评估表达式,并打印该表达式的repr,是的。但失败的是表达式的评估
  • 你确定吗?如果你是,我会很乐意删除帖子
  • 是的。这不会引发关于传递不正确数量的参数的任何异常,它显然是 SyntaxError,这是因为 *l 在语法上不正确
【解决方案2】:

我认为这实际上是一个关于理解*l或一般*ListLikeObject的问题。

关键点是*ListLikeObject 不是单独的有效表达式。这并不意味着“哦,请拆开清单”。

一个例子可以是2 *[1, 2, 3](众所周知,它会输出[1, 2, 3, 1, 2, 3])。如果个人*[1, 2, 3] 有效,它应该输出什么?它是否应该引发运行时异常,因为评估的表达式是 2 1 2 3 并且它是无效的(不知何故被除以 0)?

所以基本上,*[1, 2, 3] 只是帮助您传递参数的语法糖。您不需要手动解压缩列表,但解释器会为您完成。但本质上它仍在传递三个参数,而不是其他东西的一个元组。

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多