这是python的bug吗?

Python/PHP/Perl 开发与设计
回复
drongh
帖子: 1038
注册时间: 2007-01-10 9:32
送出感谢: 4 次
接收感谢: 5 次

这是python的bug吗?

#1

帖子 drongh » 2014-06-05 19:22

代码: 全选

theSum = 0
for number in range(1,101):
    theSum += number

print 'Sum is : ', theSum

不知道这是不是bug,上面程序里的这一部居然可以写成下面形式,而没有报警。

代码: 全选

theSum =+ number
两个输出结果是不一样的,一个100,一个5050.
头像
raptorsun
帖子: 25
注册时间: 2008-08-26 23:59
送出感谢: 0
接收感谢: 2 次

Re: 这是python的bug吗?

#2

帖子 raptorsun » 2014-06-05 19:38

+= 呼叫 __iadd__方法, theSum += number 相当于 theSum.__iadd__(number), 这个操作是inplace的, 呼叫前后theSum 的 reference不变, 也就是id(theSum)返回值不变

=+ 呼叫两个函数: operator = 和 pos , theSum =+ number相当于 theSum = pos(number ) 呼叫前后 theSum的reference改变, theSum从对原来对象的reference, 变为对pos()函数返回值的一个reference

更多参见https://docs.python.org/2/library/opera ... -functions

希望对你有帮助
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux
送出感谢: 6 次
接收感谢: 68 次

Re: 这是python的bug吗?

#3

帖子 susbarbatus » 2014-06-06 9:49

就是 theSum = +number …
沉迷将棋中……
回复

回到 “Python/Php/Perl”