井號(#)表示之後的字符爲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的整數對象被創建,該對象的同一個引用被賦值給x、y和
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在賦值之前已經事先對x和y的新值做了計算。
合法的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創建了一個浮點數對象並將其引用賦值給x。x是第一個引用,因此,該對象的引用計數被設置爲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',對DOS或win32平臺,則是'\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])