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


相关文章
|
2天前
|
设计模式 存储 Python
Python元类大揭秘:从理解到应用,一步步构建你的编程帝国
【7月更文挑战第6天】Python元类是创建类的对象的基石,允许控制类的生成过程。通过自定义元类,可在类定义时动态添加方法或改变行为。
12 0
|
4天前
|
存储 分布式计算 数据可视化
Python 金融编程第二版(四)(2)
Python 金融编程第二版(四)
13 0
|
4天前
|
存储 SQL 数据可视化
Python 金融编程第二版(四)(1)
Python 金融编程第二版(四)
14 0
|
1天前
|
程序员 Python
从零到一,彻底掌握Python闭包与装饰器的精髓,成为编程界的隐藏Boss
【7月更文挑战第7天】探索Python编程的两大基石:闭包与装饰器。闭包是内部函数记住外部作用域的变量,如`make_multiplier_of`返回的`multiplier`,它保持对`n`的引用。装饰器则是函数工厂,接收函数并返回新函数,如`my_decorator`,它在不改变原函数代码的情况下添加日志功能。掌握这些,让代码更优雅,效率更高,助你成为编程高手。
8 3
|
18小时前
|
算法 索引 Python
Python算法设计与分析大揭秘:分治法、贪心算法、动态规划...掌握它们,让你的编程之路更加顺畅!
【7月更文挑战第8天】探索Python中的三大算法:分治(如快速排序)、贪心(活动选择)和动态规划(0-1背包问题)。分治法将问题分解求解再合并;贪心策略逐步求局部最优;动态规划通过记忆子问题解避免重复计算。掌握这些算法,提升编程效率与解决问题能力。
5 1
|
1天前
|
开发者 Python
元类,Python中的隐藏BOSS?掌握它,让你的编程之路畅通无阻
【7月更文挑战第7天】Python的元类是创建类的类,如同编程的“大BOSS”。它们让开发者在类创建时干预过程,添加功能,如自动注册、修改属性。元类通过`__new__`方法动态创建类,如示例中MetaClass得到Meta元类附加的属性。虽然使用需谨慎,以免增加复杂性,但元类提供了超越常规类的强大力量,解锁高级编程技术。
10 2
|
1天前
|
开发者 Python
Python元类实战:打造你的专属编程魔法,让代码随心所欲变化
【7月更文挑战第7天】Python的元类是编程的变形师,用于创建类的“类”,赋予代码在构建时的变形能力。
11 1
|
1天前
|
程序员 数据库连接 Python
解锁Python新姿势:上下文管理器的自定义技巧,让你的编程之路更顺畅
【7月更文挑战第7天】Python上下文管理器简化资源管理,确保异常时资源正确释放。通过实现`__enter__`和`__exit__`或使用`contextmanager`装饰器自定义管理器。示例展示了类定义和装饰器方法。自定义管理器提升代码可读性,防止资源泄露,是高效编程的关键。**
|
1天前
|
Python
Python编程实战:利用闭包与装饰器优化日志记录功能
【7月更文挑战第7天】Python的闭包和装饰器简化了日志记录。通过定义如`log_decorator`的装饰器,可以在不修改原函数代码的情况下添加日志功能。当@log_decorator用于`add(x, y)`函数时,调用时自动记录日志。进一步,`timestamp_log_decorator`展示了如何创建特定功能的装饰器,如添加时间戳。这些技术减少了代码冗余,提高了代码的可维护性。
8 1
|
4天前
|
数据可视化 Python
Python 金融编程第二版(三)(4)
Python 金融编程第二版(三)
13 2

相关实验场景

更多