【问题标题】:What is the [][] (double square brackets operator) operator in python?python中的[][](双方括号运算符)运算符是什么?
【发布时间】:2022-01-16 05:13:24
【问题描述】:

我是 python 新手,我正在寻找在分配变量时执行三元运算的正确方法。

我发现有人建议这样的堆栈溢出帖子:

var = ['smaller', 'bigger'][7 > 1]

左边的值为False,右边的值为True

我运行它并且它有效。返回“更大”

但是这个语法是什么?它总是有效吗?是否已弃用?我用谷歌搜索了它,但在 python 文档或其他任何地方都找不到任何参考

谢谢

【问题讨论】:

  • ['smaller', 'bigger'] 是一个列表。 somelist[7 > 1] 正在从列表中获取一个元素。
  • @khelwood OMG 是的。非常感谢

标签: python-3.x conditional-operator square-bracket


【解决方案1】:

但是这个语法是什么?

第一对方括号是list display。第二对方括号是slicing

它总是有效吗?

“总是”是一个很长的时间。没有办法知道一百万年后 Python 会是什么样子。

但是,据我所知,列表显示的语法和切片的语法在 Python 中都没有以向后不兼容的方式发生变化,至少在您的代码中是简单的基本形式。可能被扩展了,一些高级的形式也可能改变了,但基本的形式一直是一样的。

事实上,Python 中列表显示和切片的基本形式不仅在所有版本的 Python 中都是相同的,甚至在许多其他编程语言中也是如此。在受 ALGOL 启发的语言中,对列表/数组使用方括号几乎是通用的,在索引/下标/切片中使用方括号也是如此。

它被弃用了吗?

Deprecated section of the What's New In Python 3.10 documentcurrently under development 3.11 中均未提及弃用列表显示或当前列表显示语法、切片或当前切片语法。

我在任何Python Enhancement Proposals 中也找不到任何提及弃用列表显示或当前列表显示语法、切片或当前切片语法的内容。

因此,它们最早可能会在 Python 3.12 中被弃用,这意味着它们最早可以在 Python 3.13 中被删除。 然而,这几乎是不可能的,因为它会破坏曾经编写的每一个 Python 程序。这将比从 Python 2 到 Python 3 的转变(花了 12 年)更具破坏性。

我用谷歌搜索了它,但在 python 文档或其他任何地方都找不到任何参考

您可以在Python Language Reference 的章节Full Grammar Specification 中找到Python 的完整语法。

这是列表显示的语法:

list:
    | '[' [star_named_expressions] ']' 

对于切片

primary:
    | primary '.' NAME 
    | primary genexp 
    | primary '(' [arguments] ')' 
    | primary '[' slices ']' 
    | atom

slices:
    | slice !',' 
    | ','.slice+ [','] 
slice:
    | [expression] ':' [expression] [':' [expression] ] 
    | named_expression 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 2015-05-28
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多