2013-03-04 90 views
23

除標準+,-,*/運營商;但這些是什麼意思(**,^,%,//)?這些運算符是什麼意思(**,^,%,//)? - Python?

>>> 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 
+18

我覺得您已經回答了您自己的問題。 – squiguy 2013-03-04 03:02:41

+0

如果你是谷歌「python運營商」的第一個鏈接是一個很好的運營商名單。 – 2013-03-04 03:14:08

+0

如果您有關於鏈接文檔的具體問題,請引用您不明白的地方並提出相關問題。 – phant0m 2013-03-04 10:27:24

回答

52
  • **:冪
  • ^:異或(位)
  • %:模數
  • //:用積分結果除以(丟棄餘數)
2

你是否正確**是pow呃功能。

^是按位異或。

%確實是模數運算,但注意對於正數,x % m = x只要m > x。這是從模量的定義開始的。 (此外,Python指定x % m具有m的符號。)

//是通過丟棄餘數來返回整數的除法運算。這是在大多數編程語言中使用/的劃分標準形式。然而,Python的改變/行爲進行浮點除法即使參數是整數。所述//運算符在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 | 

詳情,請參閱本問題:Division in Python 2.7. and 3.3

+1

可能值得注意的是'x%m'總是給出'm'的符號。 – HyperNeutrino 2017-11-14 22:52:58

+0

@HyperNeutrino謝謝。我原本只對解釋OP所詢問的具體情況感興趣,但由於這個答案已經成長爲稍微更一般化的東西,所以我添加了一個這樣的註釋。 – 2017-11-14 23:42:53

17

您可以在Python language reference中找到所有這些運營商,但您必須滾動一下才能找到所有這些運營商。正如其他答案所說:

  • **運算符確定冪。 a ** ba提升爲b威力。同樣的**符號也用於函數參數和調用符號,具有不同的含義(傳遞和接收任意關鍵字參數)。
  • ^符不二進制XOR。 a^b將返回一個值,其值僅設置在ab中,但不能同時設置。這個很簡單!
  • %運營商大多是找兩個整數的模量。 a % ba除以b後返回餘數。與某些其他編程語言(如C)中的模運算符不同,在Python中,其模數將與b具有相同的符號,而不是與a相同的符號。相同運營商也用於字符串格式化的「舊」的風格,所以a % b可以返回一個字符串如果a是一個格式字符串和b是一個值(或值的元組),其可插入到a
  • //符不Python的版本整數除法。 Python的整數除法與其他一些語言(如C)提供的整數除法不完全相同,因爲它向負無窮大轉折,而不是趨於零。與模數運算符一起,您可以說a == (a // b)*b + (a % b)。在Python 2中,在劃分兩個整數(使用普通除法運算符/)時,地板劃分是默認行爲。由於這可能是意想不到的(特別是當你不挑剔作爲函數參數的數字類型時),Python 3已經改變爲將「真實」(浮點)劃分劃分爲四捨五入的規範否則,只有在明確要求時纔會進行「地板」劃分。 (您也可以通過將from __future__ import division置於文件頂部來獲得Python 2中的新行爲,我強烈推薦它!)
+0

至於'%':不僅符號不同,絕對值也不一樣! – phant0m 2013-03-04 10:25:18

+0

感謝您對這些特別是模數和整數除法運算符的描述。 – javadba 2017-04-10 03:58:21