python这+=和=的拓展知识

简介:

关于网上的说法有两点我想说一下

第一点

网上一直说num = num + num 和 num += num是等价的,在这里我要说一下,这两个只有在num是数值的时候才是等价的,如果不是数值的话,num = num + num是把num 加上num的值赋予给num,这个是要新开辟一个空间给num的,而num+=num是修改num原来的值为num + num的结果。可能你会有点愣,没事,下面我们看看例子

1
2
3
4
5
6
=  [ 100 ]
def  zhouyu(num):
     num  =  num  +  num
     print (num)
zhouyu(a)
print (a)

通过上面的理解,我们知道num = num + num其实就是把[100]加上[100]的结果赋予给了num,这个时候,num就会重新去指向这个结果,也就说如果原来num的值是[100],那么现在num的值就是[100,100],而a还是[100]。

下面说另一种

1
2
3
4
5
6
=  [ 100 ]
def  zhouyu(num):
     num  + =  num
     print (num)
zhouyu(a)
print (a)

因为num +=num 其实就是修改num本身的值,所以修改了num的值,a的值也会被改变。

第二点。

用下面两段代码的结果进行比较

1
2
3
4
5
6
=  100
def  zhouyu(num):
     num  + = num
     print (num)
zhouyu(a)
print (a)

为什么执行的结果是

200

100

因为a是整数型的,除了列表和字典以外基本都是不可变的,zhouyu(a)传入的是一个a,所以num就会指向a,因为a=100是整数型的,是不可变的,所以这里就会自己去新创一个a,a=100+100所以a就是200,打印出来的就是200,而外面的a是那个a所以,就还是100。如果不怎么理解请看下面的。

1
2
3
4
5
6
=  [ 100 ]
def  zhouyu(num):
     num  + = num
     print (num)
zhouyu(a)
print (a)

为什么执行的结果是下面的结果呢

[100,100]

[100,100]

因为zhouyu(a)传入的是一个a,所以num就会指向a,这里的a就是列表型,是可以改变的。所以就会把上面的a改变了,这下打印出来的就都改变了。也就是说传入参数的时候会去看a是不是可变的,如果是可变的就会把外面的值改变了,如果不可变,就自己新创一个a,这时候这个a的值和函数外面的值就不一样啦

本文转自 周子琪 51CTO博客,原文链接:http://blog.51cto.com/izhouyu/1967627


相关文章
|
Python
Python基础分享之面向对象的进一步拓展
Python基础分享之面向对象的进一步拓展
|
4月前
|
算法 Unix 程序员
[oeasy]python031_[趣味拓展]unix起源_Ken_Tompson_Ritchie_multics
回顾了上次内容关于调试的基本概念后,本文介绍了Unix操作系统的起源。从早期计算机任务的独占执行方式讲起,到1960年代 Dartmouth 开发出分时算法,使得一台主机能够面对多个终端,轮流使用CPU时间片。随后,贝尔实验室、通用电气和MIT合作开展Multics项目,项目成员Kenneth Thompson与Dennis Ritchie在此期间开发了一款名为《Space Travel》的游戏。然而,因金融动荡等原因,Multics项目最终被裁撤。Thompson和Ritchie后来利用实验室闲置的一台PDP-7计算机仅用三周时间就开发出了Unix操作系统的第一版,初衷是为了能够继续玩游戏。
51 3
|
7月前
02-python的基础语法-标识符/运算符/字符串拓展/字符串的拼接/字符串格式化/字符串精度控制/字符串格式化方式2/对表达式进行格式化/练习题/数据输入-input语句
02-python的基础语法-标识符/运算符/字符串拓展/字符串的拼接/字符串格式化/字符串精度控制/字符串格式化方式2/对表达式进行格式化/练习题/数据输入-input语句
|
Shell 流计算 Python
[oeasy]python0083_[趣味拓展]字体样式_正常_加亮_变暗_控制序列
[oeasy]python0083_[趣味拓展]字体样式_正常_加亮_变暗_控制序列
75 0
|
7月前
|
测试技术 Apache 项目管理
软件测试|探索Flask接口路由技术:构建灵活可拓展的Python应用
软件测试|探索Flask接口路由技术:构建灵活可拓展的Python应用
|
7月前
|
存储 Python
【Python基础】字典和函数拓展
【Python基础】字典和函数拓展
|
Python
Python版飞机大战拓展功能的开发
Python版飞机大战拓展功能的开发
86 0
|
存储 BI Python
[oeasy]python0133_[趣味拓展]颜文字_流石兄弟_表情文字_2ch_kaomoji
[oeasy]python0133_[趣味拓展]颜文字_流石兄弟_表情文字_2ch_kaomoji
176 0
[oeasy]python0133_[趣味拓展]颜文字_流石兄弟_表情文字_2ch_kaomoji
|
程序员 Python
Python Qt GUI设计:窗口之间数据传递(拓展篇—5)
在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的。如果这个程序有多个窗口,那么还应该关心不同的窗口之间是如何传递数据的。 本篇博文首先给出一个例子,说明在一个窗口中不同控件之间的数据是如何传递的。对于多窗口的情况,一般有两种解决方法:一种是主窗口获取子窗口中控件的属性,另一种是通过信号与槽机制,一般是子窗口通过发射信号的形式传递数据,主窗口的槽函数获取这些数据。
|
流计算
[oeasy]python0085_[趣味拓展]字体样式_下划线_中划线_闪动效果_反相_取消效果
[oeasy]python0085_[趣味拓展]字体样式_下划线_中划线_闪动效果_反相_取消效果
93 0