① python的 a,b=b,a+b 和 a=b b=a+b 的区别
区别就是:赋值运算,先计算赋值号(也就是=号左边的,再赋值)
1、a, b = b, a+b 这种赋值
先计算等值 右边 就是 b=1 a+b=1
再赋值给a和b,那么 a=1, b=1
2、a = bb = a+b
此时 b=1, 那么a=1 那么最后 b=2
a, b = b, a+b 这个表达式的意思就是说,先计算=号的右边b的值,a+b的值,算好了,然后再分别赋值给a 和b就可以了。
Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。这种机制的基本思想跟Java,.NET是一致的。
然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine。这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大,而是说和Java 或.NET相比,Python的Virtual Machine距离真实机器的距离更远。
或者可以这么说,Python的Virtual Machine是一种抽象层次更高的Virtual Machine。基于C的Python编译出的字节码文件,通常是.pyc格式。
除此之外,Python还可以以交互模式运行,比如主流操作系统Unix/Linux、Mac、Windows都可以直接在命令模式下直接运行Python交互环境。直接下达操作指令即可实现交互操作。
② Python死磕——Python赋值语句、表达式以及打印
a赋值为's' b赋值为'p'
在这个赋值语句中,a匹配第一个字母,剩下的用于匹配b:a赋值为's',b赋值为'pam'
在这个语句中spam ham都会赋值成对相同的字符串对象'lunch'的引用
赋值右侧可以是任何类型的序列,只要长度相等即可
在Python3.0中可以允许我们使用更为通用的扩展解包语法,在python2.x中要求赋值目标中的项数和主体的数目必须一致:否则就会报错
如果想使用通用方法就需要使用分片。
在Python3.0中一个带有单个星号的名称,可以在赋值目标中使用,以指定对于序列的一个更为通用的匹配
带星号的名称可能只匹配单个的项
X+=Y X&=Y X-=Y X|=Y
X =Y X^=Y X/=Y X>>=Y
X%=Y X<<=Y X *=Y X//=Y
增强赋值语句的有点
对于增强赋值语句,对列表是做原处修改的意思。而'+'总是生成新对象。
上述的例子中,由于'+'会生成一个新的列表对象,所以M的值并没有发生改变
犹豫增强赋值对于可变的数据类型时在原处修改值,所以使M的值发生了变化
对列表调用append、sort、reverse这类在原处修改的运算,一定是对列表做原处的修改,但这些方法在列表修改后并不会把列表返回,而是返回的None对象
print默认的把对象打印到stdout流,添加了一些格式化。
格式中sep、end、和file部分如果给出的话,必须作为关键字参数给定。必须使用一种特殊的"name = value"语法来根据名称而不是根据位置来传递参数。
在Python3.0和Python2.6中,打印都默认地发送到标准输出流。也可以发送到一个文本文件’
print只是Python的人性化的特性,它提供了sys.stdout对象的简单接口
将输出流重定向到文件后print语句直接打印内容到文件