首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python——赋值

赋值 赋值操作,本来没有什么细节。但是python现在赋值操作也是花里胡哨,跟C++快一样烦人了,你不用这种方式,总有人用,因此还是有必要学一下。...序列赋值 直接看代码, 其中第三行赋值可行,合法语句,不像表明上看到A, B组成一个元组,元组不可变对象,因此无法赋值。...赋值成功。 这种操作由于python会在赋值时候发生解包操作,这个操作能够在赋值运算符左右两侧序列长度相等情况下进行。...python3中扩展序列解包 python3中对于那种将序列划分为“前面指定一部分和剩余部分”这种常见编码模式提供了扩展序列解包方式。...例如: x = x + 1 x += 1 上面这两个表达式等价,x += 1上面的简写形式。 当然了,增量赋值适用于任何支持二元表达式对象类型。

2.1K20

Python:序列增量赋值

增量赋值运算符有 += 和 *=。+= 背后特殊方法 __iadd__,如果一个类没有实现 __iadd__ 方法,Python 会退一步调用 __add__ 方法。...总体来讲,可变序列一般都实现了 __iadd__ 方法,因此 += 就地加法,而不可变序列根本就不支持这个操作。 *= 和 += 一样,只是背后特殊方法为 __imul__。...,我们来看 Leonardo Rochael 在 2013 年 Python 巴西会议上提到谜题: t = (1, 2, [30, 40]) t[2] += [50, 60] A. t 变成 (1,...因为 tuple 不支持对它元素赋值,所以会抛出 TypeError 异常 C. 以上两个都不是 D. A 和 B 都是对 估计很多人会跟我一样选 B,但其实答案 D。...3、增量赋值不是一个原子操作,我们刚才也看到了,它虽然抛出了异常,但 t 值还是改变了。

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

Python 动态赋值陷阱

花下猫语:在上一篇文章《Python与家国天下》第三节中,我借 Python 猫之口介绍了关于局部作用域变量解析问题,还引入了抽象语法树隐藏内容,最后触及了 CPython 底层实现原理边界...) ---- 在工作中, 有时候会遇到一种情况: 动态地进行变量赋值 , 不管局部变量还是全局变量, 在我们绞尽脑汁时候, Python已经为我们解决了这个问题....: LOAD_GLOBAL s='test'对应字节码: LOAD_CONST 和 STORE_FAST print s对应字节码: LOAD_FAST print a对应字节码: LOAD_GLOBAL...从上面罗列出来几个关键语句字节码可以看出, 直接赋值/读取 和 通过locals()赋值/读取 本质很大不同...., 实际就是帧对象f成员f_localsplus, 这是一个数组, 了解函数创建童鞋可能会比较清楚, 在CALL_FUNCTION时, 会对这个数组进行初始化, 将形参赋值什么都会按序塞进去,

1.4K30

Python: 链式赋值

在我们使用Python过程中, 经常遇到赋值语句, 就像下面的那样: a = 3 b = 3 可能你会觉得我又要说什么变量赋值就是引用, 这么简单知识就不讨论啦, 相信聪明大家肯定都知道, 我想讲的是链式赋值...i=3, 然而这些类似c语言这类支持表达式赋值才允许....它会返回赋值结果3, 所以在它们链式赋值中, 将右边表达式返回值, 再赋值给左边, 例如: a = s = 3 等价于: a = (s = 3) 也就是 s=3 返回3, 再赋值给a 而在python...---- 感谢@Daetalus童鞋指出问题: 支持表达式赋值Python语言核心,比如a = b + 3。...Python表达式由操作符连接而成,但“=”在Python中并不是操作符(Operator),只是语法分隔符(Delimiters)。

1.2K10

Python——赋值语句

【2】.嵌套语句代码块并且与实际缩进相关(没有大括号) 注意:不应该在同一段Python代码中混合使用制表符和空格!!...,通用性 a,b,c = [1,2,3] a,*b = 'spam' 扩展序列解包(Python3.0) spam = ham = 'lunch' 多目标赋值运算 spams += 42 增强赋值运算...Python中一个常用编写代码技巧。...因为语句执行时,Python会建立临时元组,来存储右侧变量原始值,分解赋值语句也是一种交换两变量值,却不需要自行创建临时变量方式:右侧元组会自动记住先前变量值。...事实上,Python中原始元组和列表赋值语句形式,最后已经被通用化,以接受右侧可以是任何类型序列,只要长度相等即可。

1.8K20

Python变量并列赋值疑问

Python最引以为傲一个特性可以原地交换两个变量值,既简洁又高效。这其中原因在于python变量存储地址而非实际数据,所以当交换两个变量时实际上交换了地址引用。...= b, a绝对平行赋值的话,那么两种方案运行结果应该是一致。...运行结果2 在尝试解释这个问题前,我们先试验一个python变量赋值小例子: ?...可以发现,python中对变量赋值实际上取决于变量对应数值,当变量赋值一致时,无论来源如何(初次赋值、再次赋值或者由其他计算得到),只要赋值相同就都指向同一地址。...所以,在python变量管理中,值地址决定了变量地址,而非变量存储了值大小。

2.1K40

Python切片赋值操作

问题 首先来看一小段列表推到python代码 a = [1,2,3] b = a # 赋值1 b[:] = [x+1 for x in a] print(a,b) # 赋值2 b = [x-1 for...x in a] print(a,b) 来看看输出吧: [2, 3, 4] [2, 3, 4] [2, 3, 4] [1, 2, 3] 可能有人会有疑问,为什么同样复制操作,结果却不同?...2. step by step 其实我们有结果再推原因,应该大概可以知道可能b[:]和a共享同一块内存,实践检验真理唯一标准,让我们分别在赋值1和赋值2之后分别输出a,b内存地址如下: 140348034061384...140348034061384 140348034061384 140348034060872 果不其然,第一次a,b都指向同一块内存,而赋值2则在原来地址上做修改,或者可以分别输出a is..., 3] [0, 1, 2] 140489909315016 140489909314632 我们发现当使用a[:]时,这时候返回一个新对象,所以其id都不相同

1.1K70

python基础(9)增强型赋值与使用普通赋值区别

前言 增强型赋值语句经常被使用到,因为从各种学习渠道中,我们能够得知i += 1效率往往要比 i = i + 1 更高一些(这里以 += 为例,实际上增强型赋值语句不仅限于此)。...,b += [4, 5, 6]因为list可变对象,所以b仍然在原来内存地址上,只是改变了bvalue,又因为a和b指向同一地址,所以a和b值相等 普通赋值语句: >>> a = [1,...a,目前a和b共用一片内存地址,关键点:b = b + [4, 5, 6],在原来b基础上,添加了一个列表,并且将新赋值给了左边b,原先b内存地址指向a,但是现在又重新赋值了,所以b重新开辟了一片新内存地址...同时在前文中也提到,增强赋值语句比普通赋值语句效率更高,这是因为在 Python 源码中, 增强赋值比普通赋值多实现了“写回”功能,也就是说增强赋值在条件符合情况下(例如:操作数一个可变类型对象...这一特点导致了增强赋值语句中变量对象始终只有一个,Python 解析器解析该语句时不会额外创建出新内存对象。

54520

详解增强算术赋值:“-=”操作怎么实现

序言 本文 Python语法糖 系列文章之一。最新源代码可以在 desugar 项目中找到(https://github.com/brettcannon/desugar)。...介绍 Python 有一种叫做增强算术赋值(augmented arithmetic assignment)东西。...可能你不熟悉这个叫法,其实就是在做数学运算同时进行赋值,例如 a -= b 就是减法增强算术赋值。 增强赋值Python 2.0 版本中 加入进来。...(译注:在 PEP-203 中引入) 剖析 -= 因为 Python 不允许覆盖式赋值,所以相比其它有特殊/魔术方法操作,它实现增强赋值方式可能跟你想象不完全一样。...如果调用结果 NotImplemented,或者根本不存在结果,那么 Python 会退回到常规二元算术运算:a - b。

83710

【说站】python赋值运算符支持哪些赋值

python赋值运算符支持哪些赋值 1、赋值运算符支持链式赋值。如果想让多个变量同时引用同一个对象,可以使用链式赋值。...a = b = c = 18 print(a)    # 18 print(b)    # 18 print(c)    # 18 2、赋值运算符支持参数赋值,可在赋值运算符左侧添加其他运算符,实现参数赋值...参数赋值可以使代码更加简洁,而且可读性更强。...例如:+=、-=、*=、/=、%=     a += b 相当于:a = a + b     a -= b 相当于:a = a - b 以上就是python赋值运算符支持赋值类型,希望对大家有所帮助。...更多Python学习指路:python基础教程 本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。 收藏 | 0点赞 | 0打赏

58620

python list拷贝赋值问题

参考链接: Python list append() 在python中,用等号或者append方法进行list赋值,实际上将原list引用赋给了新变量,在后续使用append方法改变这两个list...0,1,2,3]] >>b = [0,1,2,3] a[0].append(4) print(a) print(b) >>a = [[0,1,2,3,4]] >>b = [0,1,2,3,4] 避免这种情况方法用另一个变量把...(除append之外还有pop),如果重新给b赋其他值,则不会出现上述问题:(应该是重新赋值时新建了一块地址叫b,切断了a和之前变量b关系)  b = [0,1,2] a = b b = b[1:]...5.也就是说,当两个变量某一层次引用关系时,使用append、pop修改当前层级会同时修改另一变量,使用直接赋值修改当前层级不会同时修改另一变量。...当两个变量某一层次引用关系时(id(a)==id(b)),使用赋值修改下一层级值(a[0]=x),会同时修改另一变量。 6.用深拷贝a=b.deepcopy()肯定没错。

1K20
领券