#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