При просмотре codegolf, я нашел this:В чем смысл print() [] в Python?
g=input();print("Approved","Summer School","Failed")[(g<7)+(g<3)]
Я не понимаю, что [] означает, что после печати() ... Любое пояснение?
При просмотре codegolf, я нашел this:В чем смысл print() [] в Python?
g=input();print("Approved","Summer School","Failed")[(g<7)+(g<3)]
Я не понимаю, что [] означает, что после печати() ... Любое пояснение?
>>> print("Approved","Summer School","Failed")[0]
Approved
>>> print("Approved","Summer School","Failed")[1]
Summer School
>>> print("Approved","Summer School","Failed")[2]
Failed
Просмотреть рисунок? Это просто индексирование.
Кстати, мы всегда знаем, (g<7)+(g<3)
будет >= 0
(False + False
) и <= 2
(True + True
).
Напомним, что bool
подкласс int
, и что True == 1
и False == 0
(именно поэтому мы можем добавить bool
с, как это сделано выше).
Наконец, само собой разумеется, что эта путаница могла бы легко избежать с дополнительным набором круглых скобок:
print(("Approved","Summer School","Failed")[(g<7)+(g<3)])
Возможно, вы захотите сделать это явным, что 'True' и' False' являются логическими, а 'bool' является подклассом' int' в Python и, следовательно, True' == 1 и 'False' == 0 ... –
@MartijnPieters Правильно, спасибо. Я редактировал, чтобы включить это. – arshajii
Это просто кортежем индексации. Нет отличается от этого:
x = (1, 2, 3)[1]
, который назначает 2
к x
.
В вашем более сложном варианте выбирается элемент кортежа, а затем передается в print
.
Путаница в том, что код делает вид, что вы вызываете функцию с именем print
. Эта путаница была удалена в Python 3 с помощью print
, превратившегося в функцию. Код в вашем вопросе делает что-то совершенно другое в Python 3.
* делает что-то совершенно отличное в Python 3 *: да, терпит неудачу с 'TypeError: объект NoneType не подлежит расшифровке'. –
@MartijnPieters Пожалуйста, не говорите мне, что вам нужно было выполнить это, чтобы узнать, что произойдет ......... Я ожидаю большего от ниндзя ...... ;-) –
Нет. Это хуже. Я знаю исключения наизусть .. ** или ** Я просто ввел 'None [0]' в открытую подсказку Python, чтобы напомнить мне. Это 'print()' возвращает 'None' является общеизвестным, а не? –
print(x,y,...)[i]
следует разобрать как print (x,y)[i]
. Его просто печать, а затем tuple
.
Подумайте «print',' («Approved», «Summer School», «Failed») [(g <7) + (g <3)] 'отдельно, тогда вы его получите. Это Tuple и индексирование. – falsetru
FWIW, тот, кто думал, что '(...) [(g <7) + (g <3)]' была хорошей идеей, сумасшедшая! –
@DavidHeffernan Это код для гольфа; * crazy * - это название игры! – arshajii