python 中的 [][](双方括号运算符)运算符是什么?

What is the [][] (double square brackets operator) operator in python?

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

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

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

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

我运行 它而且它有效。 returns'bigger'

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

谢谢

But what is this syntax?

第一对方括号是list display. The second pair of square brackets is a slicing.

Does it always work?

“一直”是很长的时间。无法预测 Python 一百万年后会是什么样子。

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

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

Is it deprecated?

Deprecated section of the What's New In Python 3.10 document nor in the currently under development 3.11.

中没有提及弃用列表显示或当前列表显示语法、切片或当前切片语法

我在 Python Enhancement Proposals.

中也找不到任何关于弃用列表显示或当前列表显示语法、切片或当前切片语法的提及

因此,最早可以在 Python 3.12 中弃用它们,这意味着它们最早可以在 Python 3.13 中删除。 但是,这几乎是不可能的,因为它会破坏所有已编写的 Python 程序。与从 Python 2 到 Python 3 的过渡相比,这将是一个更具突破性的变化,后者花了 12 年.

I googled it but cound't find any reference in the python docs or anywhere else

您可以在 Full Grammar Specification of the Python Language Reference.

一章中找到 Python 的完整语法

这是列表显示的语法:

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

切片

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

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