2013-03-04 87 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