【Python】if文で文字列かどうか判定する

今回はPythonのif文の条件判定で文字列かどうか判定する方法を解説します。結論からいうと、type関数もしくはisinstance関数を使います。

これらの関数の公式ドキュメントは以下のリンクからどうぞ!

typeはこちら!

isinstanceはこちら!

type

まずはtype関数を使って文字列かどうかの判定を行なっていきます。typeメソッドの引数として型を知りたい変数や値を渡すことで型を知ることができます。サンプルコードではmojiretuという変数に「Hello, world」という文字列を格納しました。type()メソッドの中にこのmojiretuを渡します。if文で条件判定する際は「==」で比較するのではなく「is str」で比較をします。

# type.py

mojiretu = 'Hello, World'

if type(mojiretu) is str:
    print('mojiretu はstrです')

上記プログラムを実行すると以下のような結果になります。

$ python type.py
mojiretu はstrです

isinstance

次にisinstanceメソッドを使って文字列かどうかの判定をしてます。isinstanceメソッドでは一つ目の引数に型を知りたいオブジェクトを渡し、二つ目の引数に判定したい型を指定します。TrueもしくはFalseが返ってきます。

# isinstance.py

mojiretu = 'Hello, Wrold'

if isinstance(mojiretu, str):
    print('mojiretuはstrです。')

上記プログラムの実行結果は次のようになります。

$ python isinstance.py
mojiretuはstrです。

以上でif文で文字列かどうかの判定方法の解説は終わります。

おすすめUdemy講座 → Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学ぶオンライン講座

おすすめPython入門書

おまけ

どっちを使うべき?

文字列かどうかの判定はtypeメソッドとisinstanceメソッドの二つで記述することができました。どちらでもできますが、公式ドキュメントではisinstanceを使うことが好ましいとされています。これはサブクラスも考慮に入れるというのが理由だそうです。

class Oya(object):
    pass

class Kodomo(Oya):
    pass

kodomo = Kodomo()

if isinstance(kodomo, Oya):
    print('kodomoはOyaクラスのサブクラスです。')

if type(kodomo) is Oya:
    print('typeで判定:kodomoはOyaクラスのサブクラスです。')

これを実行すると以下の通りになります。

$ python isinstance.py
kodomoはOyaクラスのサブクラスです。

このようにisinstanceでは第一引数に渡したオブジェクトが、第二引数のクラスを継承したサブクラスから作られたオブジェクトだったとしても、Trueが返ってきます。逆にtypeではそのような処理はされません。

isinstanceの第二引数

isinstanceメソッドの第二引数には以下のようにタプルを渡すこともできます。

num = 2

if isinstance(num, (str, int)):
    print('mojiretuはstrもしくはintです。')

このプログラムを実行すると次のようになります。

$ python isinstance.py
mojiretuはstrもしくはintです。

コメント

タイトルとURLをコピーしました