Yamamoto's Laboratory
 
環境設定
 
プログラム作成
  書き方
 
演算子
 
 
 
tkinter
 
 
 
 
 
 

はじめに

Python の論理演算子は,他のプログラミング言語とほとんど同じです.

論理演算

他の言語同様,Python にもブール型があります.この型が取り得る値は,二通り (True or False) のみです.ここでは,そのブール値をとる論理演算子について説明します.

ブール演算

ブール値

ブール値(True, False) の他のオブジェクト(変数)も,プログラム中でブール値として取り扱われます.プログラム中で,Faslse として取り扱われるものは,(1)「None」,(2)値がゼロの数値「0, 0.0, 0j」,(3) 空のシーケンス「[]」や「{}」,(4)空のマッピング「{}」,(5)空文字あるいは空文字列「''」です (プログラム例).要するにゼロと無いものは,False ということです.

Python ブール値(真:True, 偽:False)の判定
真(True) 偽(False)
ブール True False
数値 ゼロ以外 0, 0.0, 0j, 0+0j
リスト 空以外 []
タプル 空以外 ()
辞書 空以外 {}
集合 空以外 set()
文字/文字列 空以外 '', ""

演算

Python で使用できる組み込みのブール演算子は,表1 の通りです.原理的には,この3種類の演算子を使えば,どんな論理演算も可能です.十分とは言わないが,必要なものは揃っています.

ブール演算子
演算 演算結果 注意
not x 否定演算
x and y 論理積 x が True のときのみ y も評価
x or y 論理和 x が False のときのみ y も評価

具体的な論理演算子を使ったプログラムをリスト 1 に示します.この実行結果は,右に示すとおりです.

ブール演算の例 実行結果
001   #!/usr/bin/python3
002   
003   x = True
004   y = False
005   
006   print("(x, y):\t", (x, y))
007   print("(not x, not y):\t", (not x, not y))
008   print("x and y:\t", x and y)
009   print("x or y:\t", x or y)
(x, y):	         (True, False)
(not x, not y):	 (False, True)
x and y:	         False
x or y:	         True

普通の算術演算のように,「True or False and not True」と演算子を連結することもできます.その場合の演算子の優先順位は,(優先順位高) not → and → or (優先順低) となります.

数値比較演算

Python の比較演算子の演算結果は,ブール値になります.比較ができないときには,TypeError の例外を出します.表2 に比較演算子を示します.最後の二つを除いて,見慣れたもので説明は不要でしょう.「is」と「is not」は変数が示すメモリーのアドレス(リファレンスのポインター)を調べます.したがって,「x is y」が True であれば,かならず「x == y」は True になります.逆は,True とは限りません.

ブール演算子
演算 演算結果
x < y x が y より小さいとき,True
x <= y x が y 以下のとき,True
x > y x が y より大きいとき,True
x >= y x が y 以上のとき,True
x == y x が y 等しいときに,True
x != y x が y 等しくないとき,True
x is y x が y が同じメモリーのアドレスを指し示すとき,True
x is not y x が y が異なるメモリーのアドレスを指し示すとき,True

Python では,「x < y < z」のような比較演算が可能です.「3 < 4 < 5」は True になります(プログラム例).他のプログラミング言語には,この機能は無いと思います.

==」は値が同じである場合に True になりますが,「is」は同一のメモリーのアドレスを指しているときに True になります.「!=」と「is not」も同じ関係です.しかし,変数のが示すメモリーについてはかなり難しい問題があります.それを,以下の具体例で示します.

== と is 演算子 実行結果
001   #!/usr/bin/python3
002   
003   u = 10/3
004   v = 10/3
005   x = 1.234
006   y = 1.234
007   
008   print("u == v: ", u == v, "\tu is v: ", u is v)
009   print("x == y: ", x == y, "\tx is y: ", x is y)
u == v:  True 	u is v:  False
x == y:  True 	x is y:  True

このプログラムの 変数 u と v,x と y はそれぞれ同じ値です.したがって演算子「==」を使った比較では,True になります.一方,「is」を使った比較では,False になるように思えます.しかし,「u is v」は False になっています.メモリーのアドレスは別なはずなのにです.これは,値「1.234」は,キャッシュされ,同一のオブジェクトのリファレンスになっていると思われます[参考資料 2].

文字と文字列の比較演算

文字列も,比較演算子(<, <=, >, >=, ==, !=, is, is not)をサポートします(プログラム例).文字列の比較は,すべての文字がアルファベットの大文字あるいは小文字の場合にしか,役に立たないと思いますが…

算術演算

数学演算

数学の演算子
演算 演算結果
x + y x と y の和
x - y x と y の差
x * y x と y の積
x / y x と y の商
x // y x と y の商を切り下げたもの
x % y x / y の剰余
-x x の符号反転
+x x そのまま
x ** y x to the power y

ビット演算

数学の演算子
演算 演算結果
x | y x と y のビット単位 論理和
x ^ y x と y のビット単位 排他的論理和
x & y x と y のビット単位 論理積
x << n x の n ビット左シフト
x >> n x の n ビット右シフト
~x x のビット反転

ページ作成情報

参考資料

  1. 演算子に関しては,Python 3.4.2 ドキュメント組み込み型を参考にしました.
  2. 初めての Python
    初めてのPython 第3版初めてのPython 第3版
    Mark Lutz 夏目 大

    オライリージャパン 2009-02-26
    売り上げランキング : 78605

    Amazonで詳しく見る
    by G-Tools

更新履歴

2015年01月01日 ページの新規作成


no counter