web-dev-qa-db-ja.com

これらの演算子はどういう意味ですか(**、^、%、//)?

標準の+-*および/演算子以外;しかし、これらはどういう意味ですか(**^%//)?

>>> 9+float(2) # addition
11.0
>>> 9-float(2) # subtraction
7.0
>>> 9*float(2) # multiplication
18.0
>>> 9/float(2) # division
4.5
>>>
>>> 9**float(2) # This looks like a square, (i.e. power 2) 
81.0
>>> 9**float(3) # So ** is equivalent to `math.pow(x,p)` ?
729.0

^演算子はどうですか?

>>> 9^int(2) # What is `^` in `x^u` , it only allows `int` for `u`
11
>>> 9^int(3)
10
>>> 9^int(4)
13
>>> 9^int(5)
12
>>> 9^int(6)
15
>>> 9^int(7)
14
>>> 9^int(8)
1
>>> 9^int(9)
0
>>> 9^int(10)
3
>>> 9^int(11)
2
>>> 9^int(12)
5

%の[x%mは通常の剰余係数を返しますが、m < xの場合のみ、なぜそうなるのですか?%は何をしますか?

>>> 9%float(2)
1.0
>>> 9%float(3)
0.0
>>> 9%float(4)
1.0
>>> 9%float(5)
4.0
>>> 9%float(6)
3.0
>>> 9%float(7)
2.0
>>> 9%float(8)
1.0
>>> 9%float(9)
0.0
>>> 9%float(10)
9.0
>>> 9%float(11)
9.0
>>> 9%float(12)
9.0

//演算子はどうですか?それは何をしますか?

>>> 9//float(2)
4.0
>>> 9//float(3)
3.0
>>> 9//float(4)
2.0
>>> 9//float(5)
1.0
>>> 9//float(6)
1.0
>>> 9//float(7)
1.0
>>> 9//float(8)
1.0
>>> 9//float(9)
1.0
>>> 9//float(1)
9.0
>>> 9//float(0.5)
18.0
38
alvas
  • **:べき乗
  • ^:排他的論理和(ビット単位)
  • %:モジュラス
  • //:整数の結果で除算(剰余を破棄)
83
John Zwinck

これらの演算子はすべて Python言語リファレンス で見つけることができますが、それらをすべて見つけるには少しスクロールする必要があります。他の答えが言ったように:

  • **演算子は累乗を行います。 a ** bab乗です。同じ**シンボルも関数引数と呼び出し表記で使用されますが、意味は異なります(任意のキーワード引数の受け渡し)。
  • ^演算子は、バイナリxorを実行します。 a ^ bは、aまたはbに設定されたビットのみで値を返しますが、両方は返しません。これは簡単です!
  • %演算子は、主に2つの整数のモジュラスを見つけるためのものです。 a % bは、abで除算した後の剰余を返します。他のプログラミング言語(Cなど)のモジュラス演算子とは異なり、Pythonモジュラスでは、bと同じ符号ではなく、aと同じ符号になります。 「古い」スタイルの文字列フォーマットにも同じ演算子が使用されるため、aがフォーマット文字列でbが値(または値のタプル)の場合、a % bは文字列を返すことができます。 )aに挿入できます。
  • //演算子は、Pythonバージョンの整数除算を行います。 Pythonの整数除算は、他の言語(Cなど)が提供する整数除算とまったく同じではありません。ゼロではなく負の無限大に向かって丸められるためです。モジュラス演算子とともに、a == (a // b)*b + (a % b)と言うことができます。 Python 2では、(通常の除算演算子/を使用して)2つの整数を除算する場合のフロア除算がデフォルトの動作です。これは予期しないことがあるので(特に、関数の引数として取得する数値の種類にこだわりがない場合)、Python 3が "true"(浮動小数点)除算の基準になるように変更されました。それ以外の場合は四捨五入され、明示的に要求された場合にのみ「フロア」分割を行います。 (Python 2の新しい動作は、from __future__ import divisionをファイルの先頭に置くことでも取得できます。強くお勧めします!)
22
Blckknght

**がべき関数であることは正しいです。

^はビット単位のXORです。

%は実際にモジュラス演算ですが、正の数の場合、x % m = xの場合は常にm > xになります。これは、モジュラスの定義に基づいています。 (さらに、Pythonはx % mmの符号を指定します。)

//は、剰余を破棄して整数を返す除算演算です。これは、ほとんどのプログラミング言語で/を使用した除算の標準形式です。ただし、Python3は、/の動作を変更して、浮動小数点除算を実行する場合でも引数は整数です//演算子は、Python 2.6とPython 3で導入され、Python 2とPython 3の間で一貫して動作する整数除算演算子を提供します。手段:

| context                                | `/` behavior   | `//` behavior |
---------------------------------------------------------------------------
| floating-point arguments, Python 2 & 3 | float division | int divison   |
---------------------------------------------------------------------------
| integer arguments, python 2            | int division   | int division  |
---------------------------------------------------------------------------
| integer arguments, python 3            | float division | int division  |

詳細については、次の質問を参照してください。 Python 2.7。および3.3の分割

3
Kyle Strand