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

Posted

技术标签:

【中文标题】python中的[][](双方括号运算符)运算符是啥?【英文标题】: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 是的。非常感谢 【参考方案1】:

但是这个语法是什么?

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

它总是有效吗?

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

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

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

它被弃用了吗?

Deprecated section of the What's New In Python 3.10 document 和 currently 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 

【讨论】:

以上是关于python中的[][](双方括号运算符)运算符是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Python3中的算术运算符

if 判断语句与shell运算

从双方实现__rmul__,python

python3简单实现支持括号的加减乘除运算

#if 定义的预处理器运算符中的括号是啥意思?

一入python深似海,第二天