由於以後的學習會設計到wxpython,而python3.x沒有匹配的wxpython,所以重新裝了python 2.7。所以所有的語法均基於python 2.7版本,我看的書是python核心編程。
一、語法
1. #後爲python的註釋
2.\n 換行符
3.\ 續行符
4.分號 用於分割同一行上的兩個子句
5.冒號 分割函數,類,控制語句等等的標題和後續子句
# this is an example
print 'aaa\nbbb'
print 'aaa\
bbb'
a = 5
if a>5:
print 'a>5'
運行:
>>>
aaa
bbb
aaabbb
6.賦值操作
python2.7支持以下模式的賦值:
而且,有一點不同於c語言:在交換兩個變量的值時,不需要臨時變量
7.標識符
首字母爲_或字母
後續字符爲字母,數字和_
大小寫敏感
python的關鍵字:
and elif global or
assert else if pass
break except import print
class exec in raise
continue finally is return
def for lambda try
del from not while
說說這些關鍵詞的用處吧:
and,or,not 布爾運算符,python中有布爾類型的,值爲true,false
幾個例子:
在2.7:
在3.3
(上面 3>2>1等價於 3>2 and 2>1)
在python裏,數值的非零,字符串的非空可以等價於布爾的true,反之0和空字符串等價到false。
elif == else if
print 輸出語句
在2.x中print是一條語句,不需要括號,但在3.x中,print()是一個函數。
二、風格
縮進:
python中沒有括號,但使用縮進來表示程序的格式,tab鍵縮進。
三、內存管理
python 中變量不需要定義,變量沒有類型,變量名可以回收使用,del語句可以收回使用中的變量。
關於對象和變量,我的看法是,對象是內存中的一塊,存放數值或字符串等等,變量是獨立的標識符,無法通過變量修改對象,變量可以關聯到對象,從而擁有對象的值和類型。《python核心編程》書上有一種很形象的說法:
對象是內存中的一塊,對象就像一個盒子,當賦值出現時,就是將變量關聯到盒子上,此時變量的值就是對象的值,變量相當於這塊內存的一個別名,每一次賦值,這塊內存的引用計數(被引用的次數,即別名的個數),就+1,初始賦值計數爲1.
當關聯到該內存變量指向了另一塊內存(即改變了變量的值)那麼引用計數就會-1.當引用計數爲0時,該塊內存就會被回收。
del語句可以強制用來減少引用計數(即撤銷變量)。
內存分配這裏,涉及到python的一些小整數和短字符串的優化問題,我想只要大概瞭解一下就好了,畢竟使用python是不需要程序員掌管內存的使用的。
四、對象
python中的對象是有類型和值和內存地址的。即三個特性:實體(identity):可以用id()獲取,類型和值
標準數據類型:
1.數值:普通整數,長整數,浮點數,複數
①整數在32位機表示大小:-2**31 -- 2**31-1。整數有10進制,8進制(以0開頭),16進制(以0x開頭)。
②長整形是整形的超集,在數字後加l或L區別。同樣有三種進制。
③浮點數對應於c中的double型,可以用10進制和科學計數法表示。
④複數形如a+bj。
有複數num,num.real獲取num的實數部分,num.imag獲取虛數,num.conjugate()獲取複數記號形式。
數值操作:+,-,*,/,%,**,對整數:~(取反),<< ,>>, &,^,|
數值函數:類型轉換函數-int(obj),float(obj),long(obj),complex(obj)/complex(real,imag),
abs(num),取絕對值
coerce(num1,num2),將num1和num2轉換成同一種類型,返回一個表列形式的轉換結果。
divmod(num1,num2),返回(num1/num2,num1%num2)
pow(num1,num2,mod=1),乘方,若有mod參數,再對乘方求除法餘數。
round(flt,ndig=0),返回一個數,其精確到flt小數點後ndig位。若ndig缺省,則返回最接近flt的整數。
進制轉化-hex(),oct()
ASCII轉換-ord(str),chr(num)
2.字符串string
3.列表list
4.表列tuple
5.字典dictionary
內建數據類型:
1.type 2.none 3.file 4.function 5.module 6.class 7.class instance 8.method
內部數據類型:
1.code 2.frame 3.traceback 4.slice 5.ellipsis 6.xrange
對象的操作:
1.比較
< ,> ,<= ,>= ,== ,!= ,<>(不再使用) 返回值是布爾值true 或false
2.對象的比較
判斷變量是否關聯到同一個對象。使用is 和 is not。相當於用id()來判斷。
例子:
第一個例子中a,b指向同一個1.3可以理解,第二個例子中這兩個1.3在內存中位置是不同的。
再看:
發現上述情況,這是python中對小整數和短字符串的優化,使內存中只有一個小整數和短字符串,因爲python解釋器認爲小整數和短字符串經常使用。
大整數,長字符串時:
3.布爾運算
前面已有敘述。
內建函數:
cmp(obj1,obj2), repr(obj), 'obj' , str(obj) ,type(obj)
1.cmp(obj1,obj2)比較obj1 和 obj2 的大小,obj1 > obj2 返回值>1,若obj1 < onj2,返回值<1,若兩者等於,返回0.
cmp的參數可以是
2.str(obj)與repr(obj)和 'obj'
這三個函數是返回obj的字符串形式。
但三者是有一些區別的.
先說str()和repr()的區別:str(obj)返回的是obj的可打印字符串表達形式。比如:
而repr(obj)返回的是obj的正是字符串:
再談repr()和' '
兩者功能一樣,但書寫要注意使用轉義字符:
3.type(obj):該函數返回obj的類型。
該函數可以通過與其他type(obj1)的比較,判斷obj的類型。
例子:
可以得出,a是float類型。
對象的分類:
1.根據存儲摸型分類:
只能存儲一個對象的類型稱爲,文字/離散存儲,數字,字符串
反之,稱爲包容器存儲,list,tuple,dictionary
2.根據是否可修改分類:
可修改: list,dictionary
不可修改:數字,字符串,tuple
3.根據訪問模型分類:
直接訪問(單個元素):數字
序列方式訪問(通過下標訪問):字符串,list,tuple
映射圖放射訪問(通過關鍵字訪問):dictionary