python 赋值操作符与增强赋值操作符的区别

a operator= b 与 a = a operator b 并不完全一致,区别在于:

1、前者只查询一次a的值,因而具有更快的可能性。

2、如果a是一个复杂的表达式(例如列表的索引位置计算,如items[offset + index]),使用增强的赋值操作符时后者较少出错。这是因为,如果计算过程需要改变,那么维护者只需要改变一次,而不是两次。

3、python重载了操作符+和+=,分别用于字符串和列表,前者表示连接,后者表示追加字符串并扩展。

在使用时,要根据使用场景选择适当的操作符。

----《Python3程序开发指南.第二版》读书笔记

时间: 2024-08-02 07:03:30

python 赋值操作符与增强赋值操作符的区别的相关文章

C++ Primer 学习笔记_60_重载操作符与转换 --赋值、下标、成员訪问操作符

重载操作符与转换 --赋值.下标.成员訪问操作符 一.赋值操作符 类赋值操作符接受类类型形參,通常该形參是对类类型的const引用,但也能够是类类型或对类类型的非const引用.假设未定义这个操作符,则编译器将合成它.类赋值操作符必须是类的成员,以便编译器能够知道是否须要合成一个.并且还能够为一个类定义很多附加的赋值操作符,这些赋值操作符会由于右操作数的不同而构成重载!如string类型: string car("Volks"); car = "Studebaker"

python中表达式赋值与链式赋值的区别

python支持普通赋值,链式赋值,增量赋值,但不支持表达式赋值. 普通赋值:x  =1 增量赋值:x = 1 ; x  += 1 链式赋值---同时对几个变量进行赋值,例子如下 >>> x = 1 >>> x = y = x + 1 >>> x,y (2, 2) 在其它语言,如C语言中,支持表达式赋值,就是说,表达式是有返回值的,例如x = 1;y = (x += 1)),那么x,y的值都是2,在python中,会发生什么情况呢? >>&

Python把同一个对象循环赋值给另外一个变量

Python把同一个对象循环赋值给另外一个变量,修改一个对象,其他对象也修改了 >>> row=['_'] * 3 >>> board = [] >>> for i in range(3): ... board.append(row) ... >>> row ['_', '_', '_'] >>> board [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']] &g

python变量存储,理解赋值、浅拷贝、深拷贝

在高级语言中,变量是对内存及其地址的抽象. 对于python而言,python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身. 引用语义:在python中,变量保存的是对象(值)的引用,我们称为引用语义.采用这种方式,变量所需的存储空间大小一致,因为变量只是保存了一个引用.也被称为对象语义和指针语义. 值语义:有些语言采用的不是这种方式,它们把变量的值直接保存在变量的存储区里,这种方式被我们称为值语义,例如C语言,采用这种存储方

第四十课、前置操作符和后置操作符

一.i++和++i有没有区别? 1.现代编译器产品会对代码进行优化 2.优化使得最终二进制程序更加高效 3.优化后的二进制程序丢失了c/c++的原生语义 4.不可能从编译后的二进制程序还原c/c++程序 //由此可知,单行的i++和++i在汇编层的代码完全一样 int i = 0; 0123136E mov dword ptr [i],0 i++; 01231375 mov eax,dword ptr [i] 01231378 add eax,1 0123137B mov dword ptr [

C++ Primer 学习笔记_58_重载操作符与转换 --重载操作符的定义

重载操作符与转换 --重载操作符的定义 引言: 明智地使用操作符重载可以使类类型的使用像内置类型一样直观! 重载操作符的定义 重载操作符是具有特殊名称的函数:保留字operator后接定义的操作符符号.如: Sales_item operator+(const Sales_item &,const Sales_item &); 除了函数调用操作符之外,重载操作符的形参数目(包括成员函数的隐式this指针)与操作符的操作数数目相同.函数调用操作符可以接受任意数目的操作数. 1.重载的操作符名

07-阻塞赋值与非阻塞赋值原理分析——小梅哥FPGA设计思想与验证方法视频教程配套文档

芯航线--普利斯队长精心奉献 ? 实验目的:掌握阻塞赋值与非阻塞赋值的区别 实验平台:无 实验原理: ????阻塞赋值,操作符为"=","阻塞"是指在进程语句(initial和always)中,当前的赋值语句阻断了其后的语句,也就是说后面的语句必须等到当前的赋值语句执行完毕才能执行.而且阻塞赋值可以看成是一步完成的,即:计算等号右边的值并同时赋给左边变量. ????非阻塞赋值,操作符为"<=","非阻塞"是指在进程语句(

verilog 阻塞赋值和非阻塞赋值

1 module main(); 2 reg clk=0; 3 reg [11:0] a=0; 4 reg [11:0] b=0; 5 always #50 clk=~clk; 6 always@(clk) 7 begin 8 a=a+4; 9 b<=a/4; 10 end 11 endmodule 如果把always中的两句顺序倒一下输出结果会改变是为什么? 上面的程序0~50s时,b=1:改成下面情形后b=0; 1 module main(); 2 reg clk=0; 3 reg [11:

阻塞赋值与非阻塞赋值

     过程赋值:用于对reg型变量赋值,改变寄存器的值或为以后排定改变.      语法 {阻塞性(blocking)赋值} RegisterLValue = [ TimingControl] Expression; {非阻塞性(non-blocking)赋值} RegisterLValue <= [ TimingControl] Expression; 阻塞:在本语句中"右式计算"和"左式更新"完全完成之后,才开始执行下一条语句: 非阻塞:当前语句的执行