この記事、何?
いまだにPython書き慣れない。。。
表題の1行表記で「???」ってなって詰まったので備忘録を少々。。。
つまり何?
Pythonで1行でif文書けるじゃないですか。こんなの。
# (こんなの)
>>> print('True') if True else print('False')
True
それを使ってこれが書きたかった。
# (これ)
>>> if True:
... para = 'True'
... else:
... para = 'False'
...
>>> para
'True'
>>>
で、書いてみたらエラーになった。
>>> para = 'True' if True else para = 'False'
File "<stdin>", line 1
SyntaxError: can't assign to conditional expression
>>>
正しくはこう書くらしい。
>>> para = 'True' if True else 'False'
>>> para
'True'
なるほど。
左辺の「para」という変数に右辺を代入する。
その右辺として何を書くかという話。
そう考えると、「'True' if True else 'False'」という値は成立するけど、
「'True' if True else para = 'False'」という値は不自然。
ちょっと納得しました。
>>> 'True' if True else 'False'
'True'
>>> 'True' if True else para = 'False'
File "<stdin>", line 1
SyntaxError: can't assign to conditional expression
参考にしたサイト
■Pythonの三項演算子(条件演算子)でif文を一行で書く
https://note.nkmk.me/python-if-conditional-expressions/
■Why is this simple conditional expression not working? [duplicate]
https://stackoverflow.com/questions/32954481/why-is-this-simple-conditional-expression-not-working
ちょっとだけ深掘り...
いや、平日だから寝ないの?という気はしてきたけど気になったので。
最初に誤解したのはこうだと思っていたから。
(Trueのときに実行される命令) if (条件) else (Falseのときに実行される命令)
でもこれはちょっと違う。(ある意味あってるといえばあっているかもだけど。。)
あくまでif文は条件をもとに値を返すもの。
こんな。
(TrueのときにReturnされる値) if (条件) else (FalseのときにReturnされる値)
あれっ?だったら最初のprint文はなに、と気になった。
>>> a = print(3)
3
>>> a
>>> type(a)
<class 'NoneType'>
>>> a
>>> a is None
True
なるほど。
printはC#とかでいうところのvoid型なのかな?
違うな。Object型でNoneを返すということかな。
なので、「print('True')」という値を得るために処理が実行された過程で文字がprintされるのね。
納得です。