Что такое оператор [][] (оператор с двойными квадратными скобками) в python?

#python-3.x #conditional-operator #square-bracket

#python-3.x #условный оператор #квадратная скобка

Вопрос:

Я новичок в python, и я искал правильный способ выполнения троичной операции при назначении переменной.

Я нашел сообщение о переполнении стека, в котором кто-то предлагал что-то вроде этого:

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

где значение слева равно False, а значение справа равно True

Я запускаю его, и он работает. возвращает «больше»

Но что это за синтаксис? Всегда ли это работает? Он устарел? Я погуглил, но не нашел никаких ссылок в документах python или где-либо еще

Спасибо

Комментарии:

1. ['smaller', 'bigger'] это список. somelist[7 > 1] получает элемент из списка.

2. @khelwood OMG да. Большое спасибо

Ответ №1:

Но что это за синтаксис?

Первая пара квадратных скобок представляет собой отображение списка. Вторая пара квадратных скобок — это нарезка.

Всегда ли это работает?

«Всегда» — это очень долгое время. Невозможно сказать, как будет выглядеть Python через миллион лет.

Однако, насколько мне известно, ни синтаксис отображения списков, ни синтаксис срезов никогда не изменялись несовместимым образом в Python, по крайней мере, в простой, базовой форме в вашем коде. Возможно, он был расширен, и некоторые расширенные формы могли быть изменены, но базовая форма всегда была одинаковой.

На самом деле, базовая форма отображения списков и срезов в Python одинакова не только для всех версий Python, но и для многих других языков программирования. Использование квадратных скобок для списков / массивов практически универсально в языках, основанных на АЛГОЛЕ, так же как и использование квадратных скобок для индексации / подписки / нарезки.

Он устарел?

В устаревшем разделе документа What’s New In Python 3.10 и в разрабатываемом в настоящее время документе 3.11 нет упоминаний об устаревших отображениях списка или текущем синтаксисе отображения списка, срезах или текущем синтаксисе срезов.


Я также не смог найти никаких упоминаний об устаревших отображениях списков или текущем синтаксисе отображения списков, срезах или текущем синтаксисе срезов ни в одном из предложений по улучшению Python.

Таким образом, самое раннее, что они могли бы устареть, было бы в Python 3.12, что означает, что самое раннее, что они могли бы быть удалены, было бы в Python 3.13. Однако это исчезающе маловероятно, поскольку это нарушило бы каждую отдельную программу на Python, когда-либо написанную. Это было бы еще более радикальным изменением, чем переход с Python 2 на Python 3, который занял двенадцать лет.

Я погуглил, но не нашел никаких ссылок в документах python или где-либо еще

Вы можете найти полный синтаксис Python в главе «Полная спецификация грамматики» справочника по языку Python.

Это синтаксис для отображения списка:

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

и для нарезки:

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

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