① 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語句直接列印內容到文件