Python程式組成的關鍵要素
Python的關鍵要素:
Python的關鍵要素包括:Python中基礎資料型別、 物件引用(變數)、常用組合資料型別、 邏輯操作符、控制流語句、算數操作符、Python輸入/輸出、函式的建立與呼叫
1、Python中基礎資料型別:
數字:int、 long、float、complex、 bool
整型(int):不可變型別
布林型(bool):Trul,False
浮點型(float):不可變型別:3.1415926
複數(complex):3+6j
字元:str,unicode
字串:"myname is field",'hello' '''world'''
例1:整型
In [1]: no=2
In [2]: id(no)
Out[2]: 33699744
In [3]: no=3
In [4]: id(no)
Out[4]: 33699720
In [5]: type(no)
Out[5]: int
In [6]: num=3
In [7]: id(num)
Out[7]: 33699720
#Python中一切皆物件,整型時不可變型別,變數引用相同的整型物件,其id相同
In [8]: 1+2
Out[8]: 3
In [9]: print _
3
# print _ 列印最後一個引用的物件,即最後表示式的結果
例2:浮點型
In [10]: no1=3.14
In [11]: type(no1)
Out[11]: float
In [12]: type(no) is type(no1)
Out[12]: False
例3:字元型
In [13]: name="field"
In [14]: print name[0]
f
In [15]: id (name)
Out[15]: 36570192
In [16]: name='jones'
In [17]: id (name)
Out[17]: 43946128
In [18]: type(name)
Out[18]: str
In [20]: name1='jones'
In [21]: id (name)
Out[21]: 43946128
#Python中字元是不可變型別,變數引用相同的不可變物件,其id相同
2、物件引用(變數)
Python將所有資料存為記憶體物件,Python中變數實際上是指向記憶體物件的引用。在任何時刻,某個物件引用可以根據需要重新引用一個不同的物件(可以是不同資料型別)。
type()用於返回給定物件的資料型別;
“=”:用於變數名與記憶體中某物件繫結;
變數命名規則:只能包含字母、數字、下劃線,且不能以數字開頭;嚴格區分字母大小寫,禁止使用保留字;
命名慣例:
單一下劃線開頭變數名(_x)不會被from module import *語句匯入;
前後有下劃線的變數名(__x__)為系統定義變數名,對Python直譯器有特殊意義;
以兩個下劃線開頭且結尾無下劃線的變數名(__x)為本地變數;
互動模式下,變數名“_”表示最後表示式的結果;
注意:變數名沒有型別,物件才有
In [22]: name='fieldyang'
In [23]: print _
True
3、python常用組合資料型別
序列型別:
列表:(list),可變型別,使用[]建立,如:['My','name','is','Field']
元組:(tuple),不可變型別,使用()建立,如:("one","two")
字串也屬於序列型別
注意:列表和元組均不真正儲存資料,而是存放物件應用
集合型別:
集合:集合(set),frozenset
對映型別:
字典:(dict),可變物件,如:{'a':11, 'c': 33, 'b': 22}
組合型別:組合型別也是物件,因此可以巢狀,如:['hello','world',[1,2,3]]
注意:資料型別均有其長度,可使用len()函式測量:len(name)
檔案型別:file
其它型別:類型別, None
其它檔案類工具:pipes,fifos, sockets
例1:
In [23]:l1=["My","name","is","Field"]
In [24]: print l1
['My', 'name', 'is', 'Field']
例2:使用索引運算子“list[i][j]”做列表索引引用
In [25]: l1[0]
Out[25]: 'My'
In [26]: l1[0][0]
Out[26]: 'M'
In [27]: l1[3]
Out[27]: 'Field'
In [28]: id(l1)
Out[28]: 40583824
In [29]:l1[3]="Ling"
In [30]: id(l1)
Out[30]: 40583824
#列表是可變型別,改變列表內容,其id不會改變
例3:使用列表切片運算子“list[i:j]”及列表擴充套件切片符“list[i:j:stride]”做切片引用
In [31]: print l1
['My', 'name', 'is', 'Ling']
In [32]: name='FieldYang'
In [33]: name[0]
Out[33]: 'F'
In [34]: name[0:1]
Out[34]: 'F'
In [35]: name[0:3]
Out[35]: 'Fie'
In [36]: name[6:]
Out[36]: 'ang'
In [37]: name[0:8:2]
Out[37]: 'Feda'
In [38]: len(name)
Out[38]: 9
例4:字典
In [39]: d1={'a':11,'b':22,'c':33}
In [40]: print d1
{'a': 11, 'c': 33, 'b': 22}
4、邏輯操作符:
身份操作符:is,後面可以接None:x is y, x not is y
例1:
In [61]: name
Out[61]: 'FieldYang'
In [62]: name1 = 'FieldYang'
In [63]: name1
Out[63]: 'FieldYang'
In [64]: name is name1
Out[64]: True
In [66]: name1 = 'Field'
In [67]: name1 is name1
Out[67]: False
In [68]: type(name) is type(name1)
Out[68]: True
成員操作符:x in y,x not in y
例2:
In [75]: print l1
['My', 'name', 'is', 'Ling']
In [76]: print name
FieldYang
In [77]: name not in l1
Out[77]: True
In [78]: 'name' in l1
Out[78]: True
比較操作符:x < y,x > y,, x <= y,x >= y,x == y, x != y
例3:
In [81]: num=1
In [82]: num1=1
In [83]: num==num1
Out[83]: True
In [84]: num1=2
In [85]: num==num1
Out[85]: False
In [86]: num>num1
Out[86]: False
In [87]: num<num1
Out[87]: True
In [88]: num!=num1
Out[88]: True
In [89]: num<=num1
Out[89]: True
邏輯運算子:and,or,not
5、控制流語句
if/elif/else:條件判斷
for/else:序列迭代
while/else:普通迴圈
pass:佔位符
break:跳出最內層的迴圈
continue:跳到所處的最近層迴圈的開始出
return:返回,預設none
raise:觸發異常
try/except/finally:捕捉異常
條件測試:
if 條件測試表達式
Python中的真假:
1)、任何非0數字和非空物件都為真;
2)、數字0、空物件和特殊物件None均為假;
3)、比較和相等測試會遞迴地應用於資料結構中;
4)、返回值為True或False;
組合條件測試:
Xand Y: 與運算
Xor Y: 或運算
notX: 非運算
A= X if Y else Z
ifY:
A= X
Else:
A= Z
expression1if boolean_expression else expression2
while語句:
whilebool_expression:
while_suite
else:
else_suite
可用引數:
break: 跳出最內層的迴圈;
continue:跳到所處的最近層迴圈的開始處;
pass:點位語句
else程式碼塊:迴圈正常終止才會執行;如果迴圈終止是由break跳出導致的,則else不會執行;
6、算數操作符:
一元運算:-x, +x,~x:
冪運算:x ** y
增強賦值: +=, -=,*=, /=, //=, %=,
7、Python輸入/輸出
輸出:
Python3:print()函式;
Python2:print語句
輸入:
input()
raw_input()
格式化輸出:
print "String %format1 %format2 ... " %(value1,value2,...)
d,i:十進位制整數或長整數;
u:無符號整數或長整數;
o:八進位制整數或長整數;
x:十六進位制整數或長整數;
X:十六進位制整數(大寫字母);
F:浮點數,如[-]m.dddddd;
E:浮點數,如[-]m.dddddde+-xx;
E:浮點數,如[-]m.ddddddE+-xx;
g,G:指數小於-4或更高精度時使用%e或%E,否則使用%f;
s:字串或任意物件,格式化程式碼使用str()生成字串;
r:同repr()生成的字串;c:單個字元;%字面量%;
%號後面可以使用的修飾符:
%[(name)][flags][width][.precision]typecode
[(name)]:位於括號中的一個屬於後面的字典的鍵名,用於選出一個具體專案
[flags]:標誌(可使用一個或多個)
-:左對齊,預設為右對齊
+:新增數字符號,正數會帶上+號
0:使用0填充
[width]:指定最小寬度的數字
[.precision]:小數點,用於按照精度分割欄位的寬度
typecode:數字,指定要答應的字串中的最大字元個數,浮點數中小數點之後的位數,或整數的最小位數;
例1:print輸出
In [94]: a=22
In [95]: b=44
In [96]: print a,b
22 44
In [97]: print a,b,
22 44
例2:讀標準輸入
In [91]: raw_input("please input anumber: ")
please input a number: 88
Out[91]: '88'
In [92]: num=raw_input("please input anumber: ")
please input a number: 88
In [93]: print num
88
例3:格式化輸出浮點型、整型、字元型
In [98]: num=8.8
In [99]: print "The num is %f" %num
The num is 8.800000
In [100]: print "The num is %d" %num
The num is 8
In [101]: num1=6.66
In [102]: print "The nums are %d and%f" % (num,num1)
The nums are 8 and 6.660000
In [103]: print "The nums are %d and%f" % (num,5.2)
The nums are 8 and 5.200000
In [104]: print "The nums are %e and%f" % (num,5.2)
The nums are 8.800000e+00 and 5.200000
In [105]: name="FieldYang"
In [106]: print "My name is %s."% name
My name is FieldYang.
In [107]: print "The num is %s."% num
The num is 8.8.
In [120]: print "The nums are %+e and%f" % (num,5.2)
The nums are +8.800000e+00 and 5.200000
In [121]: print "The nums are %+e and%f" % (num,-5.2)
The nums are +8.800000e+00 and -5.200000
In [122]: print "The nums are %+e and%+f" % (num,-5.2)
The nums are +8.800000e+00 and -5.200000
In [123]: print "The nums are %f and%f" % (num,-5.2)
The nums are 8.800000 and -5.200000
例4:格式化輸出使用修飾符
In [124]: print "The nums are %+20fand %f" % (num,-5.2)
The nums are +8.800000 and -5.200000
In [125]: print "The nums are %+20.10fand %f" % (num,-5.2)
The nums are +8.8000000000 and -5.200000
In [126]: print "The nums are %-20.10fand %f" % (num,-5.2)
The nums are 8.8000000000 and -5.200000
In [127]: print "The nums are %-20.15fand %f" % (num,-5.2)
The nums are 8.800000000000001 and -5.200000
例5:使用字典演示格式化輸出
In [137]: d1={'a':11,'b':22,'c':33}
In [138]: print d1
{'a': 11, 'c': 33, 'b': 22}
In [139]: print "The a is %(a)10.3f, bis %(b)-10d,c is %(c)5.3f" % d1
The a is 11.000, b is 22 ,c is33.000
In [140]: print "The a is %(a)s, b is%(b)d,c is %(c)5.3f" % d1
The a is 11, b is 22,c is 33.000
8、函式的建立與呼叫
deffunctionName(arguments):
suite
函式可以引數化,通過傳遞不同的引數來呼叫,每個函式都有返回值,預設為None,也可以使用“return value”明確定義返回值。
def語句會建立一個函式物件,並同時建立一個指向函式的物件引用,函式也是物件,可以儲存在組合資料型別中,也可以作為引數傳遞給其它函式;
說明:calleble()可用於測試函式是否可呼叫
Python標準庫中有很多內建模組,這些模組擁有大量內建函式;Python模組使用import語句進行匯入,後跟模組名稱(不能帶上.py字尾),匯入一個模組後,可以訪問其內部包含的任意函式、類、變數
例1:構建printName打印出賦值的名字
In [1]: def printName(name):
....: print name
....:
In [2]: printName('JONES')
JONES
In [3]: test='kin'
In [4]: printName(test)
kin
In [5]: name=printName('field')
Field
例2:使用callable()測試函式是否可呼叫
In [6]: callable(name)
Out[6]: False
In [7]: callable(printName)
Out[7]: True
例3:使用import匯入模組並測試模組內函式方法的使用
In [8]: import random
In [9]: random.
random.BPF random.WichmannHill random.getstate random.sample
random.LOG4 random.betavariate random.jumpahead random.seed
random.NV_MAGICCONST random.choice random.lognormvariate random.setstate
random.RECIP_BPF random.division random.normalvariate random.shuffle
random.Random random.expovariate random.paretovariate random.triangular
random.SG_MAGICCONST random.gammavariate random.randint random.uniform
random.SystemRandom random.gauss random.random random.vonmisesvariate
random.TWOPI random.getrandbits random.randrange random.weibullvariate
In [9]: random.random()
Out[9]: 0.4189901841264161
In [10]: random.random()
Out[10]: 0.9359719349997645
In [11]: students = ['x','y','z']
In [12]: random.choice(students)
Out[12]: 'x'
In [13]: random.choice(students)
Out[13]: 'x'
In [14]: random.choice(students)
Out[14]: 'z'
In [15]: random.choice(students)
Out[15]: 'x'
In [16]: random.choice(students)
Out[16]: 'x'
In [17]: random.choice(students)
Out[17]: 'x'
In [18]: random.choice(students)
Out[18]: 'y'