python 2.7

由於以後的學習會設計到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
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章