这篇博客可能比较low bee,但是对于一个掌握了其他语言,刚刚学习Python的人来说,也许会有一点点的帮助。
在Cpp中,我们总是讨论前缀自增和后缀自增的效率问题:
++i 是i=i+1,表达式的值就是i本身
i++ 也是i=i+1,但表达式的值是加1前的副本,由于要先保存副本,因此效率低一些。
那么我看python中的自增呢?
++i
>>> i=1
>>> ++i
1
i++
>>> i=1
>>> i++
File "", line 1
i++
^
SyntaxError: invalid syntax
解释:
python中根本不存在自增,之所以++i还是i的值,因为这里的+是表示正数的意思:
>>> i=1
>>> +++++i
1
i+=x与i=i+x
这里二者的性能就不多讨论了,我们只看特俗的情况:
>>> a = [1, 2, 3]
>>> b = a
>>> b += [1, 2, 3]
>>> a
[1, 2, 3, 1, 2, 3]
>>> b
[1, 2, 3, 1, 2, 3]
>>> a = [1, 2, 3]
>>> b = a
>>> b = b + [1, 2, 3]
>>> a
[1, 2, 3]
>>> b
[1, 2, 3, 1, 2, 3]
is与==
if x is y, then x==y is also True.
is compares for two objects in memory, == compares their values
“`cpp
a=1
b=1
a is b
True
a == b
True
再看这个你就明白了:
```cpp
>>> a=19998989890
>>> b=19998989889+1
>>> a is b
False
>>> a == b
True
那如果这样呢:
>>> a=1
>>> b=1+0
>>> a is b
True
>>> a == b
True
这是什么鬼,这时候怎么是a is b了呢?
这就是Python中的效率问题了。
>>> a='hi'
>>> b='hi'
>>> a is b
True
>>> a==b
True
>>> a1='I am using long string for testing'
>>> b1='I am using long string for testing'
>>> a1 is b1
False
>>> a1 == b1
True
这就是Python的string interning: 也就是说,值相同的字符串对象只会保存一份,是共用的,这也决定了字符串必须是不可变对象。想一想,就跟数值类型一样,相同的数值只要保存一份就行了,没必要用不同对象来区分。