Python核心編程第三章筆記

井號(#)表示之後的字符爲Python註釋

反斜線 (\ ) 繼續上一行

分號 (; )將兩個語句連接在一行中

冒號 (: ) 將代碼塊的頭和體分開



C語言賦值語句,被當成一個表達式(可以返回值)

Python的賦值語句不會返回值。

>>>x = 1

>>>y = (x = x + 1)

#assignments not expressions! File "<stdin>", line 1

y= (x = x + 1)

^

SyntaxError:invalid syntax


鏈式賦值沒問題,(本章稍後部分會給出更多的例子):

>>>y = x = x + 1

>>>x, y

(2,2)


增量賦值

x= x + 1可以被寫成:x+= 1

增量賦值相對普通賦值不僅僅是寫法上的改變,最有意義的變化是第一個對象(我們例子

中的 A)僅被處理一次。可變對象會被就地修改(無修拷貝引用),不可變對象則和A= A +B 的結果一樣(分配一個新對象)

>>>m = 12

>>>m %= 7

>>>m

5

>>>m **= 2

>>>m

25

>>>aList = [123, 'xyz']

>>>aList += [45.6e7]

>>>aList

[123,'xyz', 456000000.0]



多重賦值

>>>x = y = z = 1

>>>x

1

>>>y

1

>>>z

1

在上面的例子中,一個值爲1的整數對象被創建,該對象的同一個引用被賦值給xy

z。也就是將一個對象賦給了多個變量。當然,Python當中,將多個對象賦給多個變量也是

可以的。


“多元”賦值

用這種方式賦值時,等號兩邊的對象都是元組

>>>x, y, z = 1, 2, 'a string'

>>>x

1

>>>y

2

>>>z

'astring'

相當於:

>>>(x, y, z) = (1, 2, 'a string')


/*C語言中兩個變量交換*/

tmp= x;

x= y;

y= tmp;


/*python中兩個變量交換*/

>>>x, y = 1, 2

>>>x

1

>>>y

2

>>>x, y = y, x

>>>x

2

>>>y

1

顯然,Python在賦值之前已經事先對xy的新值做了計算。


合法的Python標識符

Python標識符字符串規則和其他大部分用C編寫的高級語言相似:

第一個字符必須是字母或下劃線(_)

剩下的字符可以是字母和數字或下劃線

大小寫敏感

標識符不能以數字開頭;除了下劃線,其他的符號都不允許使用。處理下劃線最簡單的方法是把它們當成字母字符。

大小寫敏感意味着標識符 foo不同於 Foo,而這兩者也不同於FOO


專用下劃線標識符


_xxx不用'frommodule import *'導入

__xxx__系統定義名字

__xxx類中的私有變量名



下面就是一種非常合理的佈局:

#(1)起始行(Unix)

#(2)模塊文檔

#(3)模塊導入

#(4)變量定義

#(5)類定義

#(6)函數定義

#(7)主程序

當對象被創建並(將其引用)賦值給變量時,該對象的引用計數就被設置爲1

當同一個對象(的引用)又被賦值給其它變量時,或作爲參數傳遞給函數,方法或類實例

,或者被賦值爲一個窗口對象的成員時,該對象的一個新的引用,或者稱作別名,就被創建

(則該對象的引用計數自動加1)

請看以下聲明:

x= 3.14

y= x

語句x=3.14創建了一個浮點數對象並將其引用賦值給xx是第一個引用,因此,對象的引用計數被設置爲1。語句y=x創建了一個指向同一對象的別名y。事實上並沒有爲Y創建一個新對象,而是該對象的引用計數增加了1(變成了2)。這是對象引用計數增加的方式之一。還有一些其它的方式也能增加對象的引用計數,比如該對象作爲參

數被函數調用或這個對象被加入到某個容器對象當中時。



對象的引用計數在

1、對象被創建

x= 3.14

2、或另外的別名被創建

y= x

3、或被作爲參數傳遞給函數(新的本地引用)

foobar(x)

4、或成爲容器對象的一個元素

myList= [123, x, 'xyz']



引用計數在以下情況會減少:一個本地引用離開了其作用範圍。

1、比如foobar()(參見上一下例子)函數結束時。

2、對象的別名被顯式的銷燬。

dely # or del x

3、對象的一個別名被賦值給其它的對象

x= 123

4、對象被從一個窗口對象中移除

myList.remove(x)

5、窗口對象本身被銷燬

delmyList # or goes out-of-scope



Unix平臺,'\n',DOSwin32平臺,則是'\r\n'

通過使用os.lineseq,我們不必關心程序運行在什麼平臺,也不必要根據不同的平臺決定使用哪種行結束符。


ls=os.lineseq

all.append(entry) # write lines to file with proper line-ending

fobj= open(fname, 'w')

fobj.writelines(['%s%s'% (x, ls) for x in all]) 

發佈了30 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章