本来であれば、当サイトのstrを扱っているページで書いた方が良いのかも知れないが…
if文
いろんな局面で、文字列が空であるかNULLであるかの条件分岐が登場すると思う。ここで空とNULLと表現したが、Python的には以下の様な文字列になる。
data1 = "" # 空文字 data2 = None # NULL
システムを操作しているユーザーからみると、ほとんどの場合どちらも同じで“データが無い時”という扱いになることが多く、それをそのまま表現すると以下の様になる。
if data is None or data == "": print("データが無いとき")
しかしこれ、もっと単純にかけるので是非覚えておきたい。
empty_null.py
data = "" if data: print("データがあるとき") else: print("データが無いとき") data = None if data: print("データがあるとき") else: print("データが無いとき")
MacBookPro:src $ python empty_null.py データが無いとき データが無いとき MacBookPro:src $
つまりは、最初の例のデータが無いときという条件分岐を作りたければnotをつかって以下の様にすればよい。
if not data: print("データが無いとき")
まぁ、英語として見るには少し違和感はあるが、それでもif not dataと聞いたなら、データ無いときって言ってるんだろうなとは聞き取ると思うので、そう悪くない。
代入
ここまでは空文字かNULLかを判定するといった局面での話だったが、実はデータを格納するときにも同じように覚えておきたいことがある。
データを格納するときに、値があるならその値に、空やNULLだったら空に統一、またはNULLに統一という処理だ。
empty_null2.py
data = None result = data or "" print("result: >>>" + str(result) + "<<<") data = "" result = data or None print("result: >>>" + str(result) + "<<<") data = "value1" result = data or None print("result: >>>" + str(result) + "<<<") result = data or "" print("result: >>>" + str(result) + "<<<")
代入するときにorを使う方法だ。実行してみれば分かるが、以下の様になる。
MacBookPro:src $ python empty_null2.py result: >>><<< result: >>>None<<< result: >>>value1<<< result: >>>value1<<< MacBookPro:src $
文字列がNULLつまりはPython的にはNoneとなっていることで嬉しいことがあるか考えてみたが、ちょっと思い浮かばない…
そもそもの話として、例えばデータベースでは、値があっても空文字でもNULLでもchar型である事に変わりは無い。だが、PythonはNULLの時だけはNoneが入っていて、それは文字列ではないのだ。そのままprintするならまだしも他の文字列と連結するのでさえ気を遣うのだ。空文字は空ではあるが、文字列である事で受ける恩恵があるたくさんあると思うので、是非とも活用したい。