井號(#)
表示之後的字元為python注釋
反斜線 (\ )
繼續上一行
分號 (; )
將兩個語句連線在一行中
冒號 (: )
將**塊的頭和體分開
c語言賦值語句,被當成乙個表示式(
可以返回值)。
python
的賦值語句不會返回值。
>>>x = 1
>>>y = (x = x + 1)
#assignments not expressions! file "", 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。
專用下劃線識別符號
_***
不用'frommodule import *'匯入
__***__
系統定義名字
__***
類中的私有變數名
下面就是一種非常合理的布局:
#(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
fobj= open(fname, 'w')
fobj.writelines(['%s%s'% (x, ls) for x in all])
Python核心程式設計筆記 第三章
3.1 語句和語法 3.1.1 注釋 3.1.2 繼續 一般使用換行分隔,也就是說一行乙個語句。一行過長的語句可以使用反斜槓 分解成幾行。兩種例外情況乙個語句不使用反斜線也可以跨行 在使用閉合操作符時,另外就是三引號包括下的字串也可以跨行書寫。3.1.3 多個語句構成 組 3.1.4 組由不同的縮排...
第三章 核心物件
一 核心物件 1 每個核心物件都是一片兒記憶體 資料結構 由系統核心分配與訪問。2 令牌物件,事件物件,程序物件,訊號量物件,執行緒物件等都是核心物件。3 核心物件有安全限制,在建立之初就需要傳入乙個結構security attributes的安全描述符 4 類似的還有使用者物件和gdi物件等等,它...
第三章筆記
第三章預習筆記 一 高階語言和機器指令中的運算 1,按位運算 符號 按位or運算 符號 按位and運算 符號 表示按位not運算 符號 按位xor運算。實現掩碼操作 通過與給定的乙個位模式進行按位與,可以提取所需要的位,對這些位進行 置1 清0 等。2,符號 按位or運算 符號 表示and運算 符號...