Python3 演算子
演算子とは?
この章では主にPythonの演算子について説明します。
簡単な例を挙げます:
4 + 5 = 9
例の中で、4と5と呼ばれますオペランド,+と呼ばれます演算子。
Python言語は以下の種類の演算子をサポートしています:
次に、Pythonの演算子を一つずつ学んでいきましょう。
Python算術演算子
以下、変数はa=10、変数はb=21:
| 演算子 | 説明 | 例 |
|---|---|---|
| + | 加算 - 2つのオブジェクトを加算する | a + b は結果 31 を出力 |
| - | 減算 - 負の数、またはある数から別の数を引く | a - b は結果 -11 を出力 |
| * | 乗算 - 2つの数を掛ける、または繰り返された文字列を返す | a * b は結果 210 を出力 |
| / | 除算 - x を y で割る | b / a は結果 2.1 を出力 |
| % | 剰余 - 除算の余りを返す | b % a は結果 1 を出力 |
| ** | べき乗 - x の y 乗を返す | a**b は 10 の 21 乗 |
| // | 切り捨て除算 - 小さい方向に整数を取る |
>>> 9//2 4 >>> -9//2 -5 |
以下の例は、Pythonのすべての算術演算子の操作を示しています:
例(Python 3.0+)
上記の例の出力結果:
1 - c 的值为: 31 2 - c 的值为: 11 3 - c 的值为: 210 4 - c 的值为: 2.1 5 - c 的值为: 1 6 - c 的值为: 8 7 - c 的值为: 2
Python比較演算子
以下、変数 a は 10、変数 b は 20 とします:
| 演算子 | 説明 | 例 |
|---|---|---|
| == | 等しい - オブジェクトが等しいかどうかを比較する | (a == b) は False を返す。 |
| != | 等しくない - 2つのオブジェクトが等しくないかどうかを比較する | (a != b) は True を返す。 |
| > | より大きい - x が y より大きいかどうかを返す | (a > b) は False を返す。 |
| < | より小さい - x が y より小さいかどうかを返す。すべての比較演算子は真のとき 1、偽のとき 0 を返します。これはそれぞれ特別な変数 True と False に相当します。これらの変数名が大文字であることに注意してください。 | (a < b) は True を返す。 |
| >= | 以上 - x が y 以上かどうかを返す。 | (a >= b) は False を返す。 |
| <= | 以下 - x が y 以下かどうかを返す。 | (a <= b) は True を返す。 |
以下の例は、Pythonのすべての比較演算子の操作を示しています:
例(Python 3.0+)
上記の例の出力結果:
1 - a 不等于 b 2 - a 不等于 b 3 - a 大于等于 b 4 - a 大于 b 5 - a 小于等于 b 6 - b 大于等于 a
Python代入演算子
以下、変数 a は 10、変数 b は 20 とします:
| 演算子 | 説明 | 例 |
|---|---|---|
| = | 単純代入演算子 | c = a + b は a + b の演算結果を c に代入する |
| += | 加算代入演算子 | c += a は c = c + a と同等 |
| -= | 減算代入演算子 | c -= a は c = c - a と同等 |
| *= | 乗算代入演算子 | c *= a は c = c * a と同等 |
| /= | 除算代入演算子 | c /= a は c = c / a と同等 |
| %= | 剰余代入演算子 | c %= a は c = c % a と同等 |
| **= | べき乗代入演算子 | c **= a は c = c ** a と同等 |
| //= | 切り捨て除算代入演算子 | c //= a は c = c // a と同等 |
| := | セイウチ演算子。この演算子の主な目的は、式の中で代入とその代入値を返すことを同時に行うことです。Python3.8 バージョンで追加された演算子。 | この例では、代入式を使うことで len() を2回呼び出すのを避けられます: if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
|
以下の例は、Pythonのすべての代入演算子の操作を示しています:
例(Python 3.0+)
上記の例の出力結果:
1 - c 的值为: 31 2 - c 的值为: 52 3 - c 的值为: 1092 4 - c 的值为: 52.0 5 - c 的值为: 2 6 - c 的值为: 2097152 7 - c 的值为: 99864
Python 3.8 以降では、セイウチ演算子(Walrus Operator)と呼ばれる新しい構文機能が導入され、それには:=記号を使います。この演算子の主な目的は、式の中で代入とその代入値を返すことを同時に行うことです。
セイウチ演算子を使うと、場合によってはコードを簡素化できます。特に、式の中で代入結果を使用する必要がある場合に有効です。これはループ条件や式内の重複した計算を簡素化するのに役立ちます。
以下はセイウチ演算子の使用を示す簡単な例です:
例
n = 10
if n > 5:
print(n)
# セイウチ演算子を使用
if (n := 10) > 5:
print(n)
if (n := 10) > 5::これはセイウチ演算子(:=)を使用した書き方です。セイウチ演算子は式の中で代入操作を行います。(n := 10):変数nを 10 に代入し、同時にこの代入結果を返します。> 5:代入後のnが 5 より大きいかどうかを確認します。条件が真の場合、次のコードブロックが実行されます。
print(n):条件が真の場合、変数nの値(すなわち 10)を出力します。
セイウチ演算子の利点:
- セイウチ演算子(
:=)は式の内部で代入を許可するため、コードの重複を減らし、可読性と簡潔さを向上させることができます。 - 上記の例では、従来の書き方では代入のために別の行が必要です
n、その後if文で条件チェックを行います。一方、セイウチ演算子を使用した書き方では、if文内で直接代入と条件チェックを行うことができます。
Pythonビット演算子
ビット演算子は数値を2進数とみなして計算します。Pythonのビット演算の規則は以下のとおりです:
下の表では、変数 a は 60、b は 13 で、2進数形式は次のとおりです。
a = 0011 1100 b = 0000 1101 ----------------- a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011
| 演算子 | 説明 | 例 |
|---|---|---|
| & | ビット単位の論理積(AND)演算子:演算に関与する2つの値について、対応する2つのビットが両方とも1の場合のみ、そのビットの結果は1になり、それ以外は0になります。 | (a & b) の出力結果は 12、2進数での説明:0000 1100 |
| | | ビット単位の論理和(OR)演算子:対応する2つの2進ビットのいずれかが1であれば、結果ビットは1になります。 | (a | b) の出力結果は 61、2進数での説明:0011 1101 |
| ^ | ビット単位の排他的論理和(XOR)演算子:対応する2つの2進ビットが異なるとき、結果は1になります。 | (a ^ b) の出力結果は 49、2進数での説明:0011 0001 |
| ~ | ビット反転演算子:データの各2進ビットを反転します。つまり、1を0に、0を1にします。~x例えば-x-1 | (~a ) の出力結果は -61、2進数での説明:1100 0011、符号付き2進数の2の補数形式です。 |
| << | 左シフト演算子:オペランドの各2進ビットをすべて左に指定した桁数だけシフトします。シフトする桁数は "<<" の右側の数値で指定し、上位ビットは破棄され、下位ビットには0が補充されます。 | a << 2 の出力結果は 240、2進数での説明:1111 0000 |
| >> | 右シフト演算子:">>" の左側のオペランドの各2進ビットをすべて右に指定した桁数だけシフトします。">>" の右側の数値がシフトする桁数を指定します。 | a >> 2 の出力結果は 15、2進数での説明:0000 1111 |
以下の例は、Pythonのすべてのビット演算子の操作を示しています。
例(Python 3.0+)
上記の例の出力結果:
1 - c 的值为: 12 2 - c 的值为: 61 3 - c 的值为: 49 4 - c 的值为: -61 5 - c 的值为: 240 6 - c 的值为: 15
Python論理演算子
Python言語は論理演算子をサポートしています。以下では、変数 a は 10、b は 20 と仮定します:
| 演算子 | 論理式 | 説明 | 例 |
|---|---|---|---|
| and | x and y | ブール「論理積(AND)」 - x が False の場合、x and y は x の値を返し、それ以外の場合は y の計算値を返します。 | (a and b) は 20 を返します。 |
| or | x or y | ブール「論理和(OR)」 - x が True の場合、x の値を返し、それ以外の場合は y の計算値を返します。 | (a or b) は 10 を返します。 |
| not | not x | ブール「論理否定(NOT)」 - x が True の場合は False を返します。x が False の場合は True を返します。 | not(a and b) は False を返します。 |
上記の例の出力結果:
例(Python 3.0+)
上記の例の出力結果:
1 - 变量 a 和 b 都为 true 2 - 变量 a 和 b 都为 true,或其中一个变量为 true 3 - 变量 a 和 b 有一个不为 true 4 - 变量 a 和 b 都为 true,或其中一个变量为 true 5 - 变量 a 和 b 都为 false,或其中一个变量为 false
Pythonメンバー演算子
上記の演算子に加えて、Pythonはメンバー演算子もサポートしています。テスト例には、文字列、リスト、タプルなどを含む一連のメンバーが含まれています。
| 演算子 | 説明 | 例 |
|---|---|---|
| in | 指定されたシーケンス内で値が見つかった場合は True を返し、それ以外の場合は False を返します。 | x は y シーケンス内にある、x が y シーケンス内にある場合は True を返します。 |
| not in | 指定されたシーケンス内で値が見つからない場合は True を返し、それ以外の場合は False を返します。 | x は y シーケンス内にない、x が y シーケンス内にない場合は True を返します。 |
以下の例は、Pythonのすべてのメンバー演算子の操作を示しています。
例(Python 3.0+)
上記の例の出力結果:
1 - 变量 a 不在给定的列表中 list 中 2 - 变量 b 不在给定的列表中 list 中 3 - 变量 a 在给定的列表中 list 中
Python同一性演算子
同一性演算子は、2つのオブジェクトのメモリ位置を比較するために使用されます。
| 演算子 | 説明 | 例 |
|---|---|---|
| is | is は、2つの識別子が同じオブジェクトを参照しているかどうかを判断します。 | x is y、同様にid(x) == id(y)、参照しているオブジェクトが同じであれば True を返し、それ以外の場合は False を返します。 |
| is not | is not は、2つの識別子が異なるオブジェクトを参照しているかどうかを判断します。 | x is not y、同様にid(x) != id(y)。参照しているオブジェクトが同じでない場合は結果として True を返し、それ以外の場合は False を返します。 |
注: id()関数はオブジェクトのメモリアドレスを取得するために使用されます。
以下の例は、Pythonのすべての同一性演算子の操作を示しています。
例(Python 3.0+)
上記の例の出力結果:
1 - a 和 b 有相同的标识 2 - a 和 b 有相同的标识 3 - a 和 b 没有相同的标识 4 - a 和 b 没有相同的标识
is と == の違い:
is は2つの変数が参照するオブジェクトが同じかどうかを判断するために使用され、== は参照している変数の値が等しいかどうかを判断するために使用されます。
>>>a = [1, 2, 3] >>> b = a >>> b is a True >>> b == a True >>> b = a[:] >>> b is a False >>> b == a True
Python演算子の優先順位
以下の表は、優先順位が最高から最低までのすべての演算子を示しています。同じセル内の演算子は同じ優先順位を持ちます。演算子は特に指定がない限り、すべて二項演算を指します。同じセル内の演算子は左から右へグループ化されます(ただし、べき乗演算は右から左へグループ化されます)。
演算子 |
説明 |
|---|---|
|
括弧で囲まれた式 |
|
読み取り、スライス、呼び出し、属性参照 |
await x |
await 式 |
|
べき乗(指数) |
|
正、負、ビット単位の否定(NOT) |
|
乗算、行列乗算、除算、整数除算、剰余 |
|
加算と減算 |
|
シフト |
|
ビット単位の論理積(AND) |
|
ビット単位の排他的論理和(XOR) |
|
ビット単位の論理和(OR) |
|
比較演算、メンバー検出と同一性検出を含む |
|
論理否定(NOT) |
|
論理積(AND) |
|
論理和(OR) |
|
条件式 |
|
lambda 式 |
|
代入式 |
以下の例は、Pythonのすべての演算子の優先順位の操作を示しています。
例(Python 3.0+)
上記の例の出力結果:
(a + b) * c / d 运算结果为: 90.0 ((a + b) * c) / d 运算结果为: 90.0 (a + b) * (c / d) 运算结果为: 90.0 a + (b * c) / d 运算结果为: 50.0
and はより高い優先順位を持っています:
例
上記の例では、最初に計算し、y and zFalse を返し、次にx or FalseTrue を返します。出力結果は次のとおりです:
情况1:默认优先级(先算and) yes 情况2:强制改变优先级(先算or) no
その他の拡張注意:Python3 ではサポートされなくなりました<>演算子は、使用できます!=代わりに、どうしてもこの比較演算子を使用したい場合は、以下の方法を使用できます:
>>> from __future__ import barry_as_FLUFL >>> 1 <> 2 True