6
3

More than 3 years have passed since last update.

Python手遊び(ifの1行表記)

Last updated at Posted at 2020-03-10

この記事、何?

いまだに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されるのね。

納得です。

6
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3