Python核心程式設計第三章筆記

2021-06-21 20:09:32 字數 3577 閱讀 9599

井號(#)

表示之後的字元為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運算 符號...