Python學習筆記

目錄python

1、安裝、編譯與運行正則表達式

2、變量、運算與表達式express

3、數據類型編程

      一、數字api

      二、字符串數組

      三、元組app

      四、列表ide

      五、字典函數

4、流程控制oop

      一、if-else

      二、for

      三、while

      四、switch

5、函數

      一、自定義函數

      二、Lambda函數

      三、Python內置函數

6、包與模塊

      一、模塊module

      二、包package

7、正則表達式

      一、元字符

      二、經常使用函數

      三、分組 

      四、一個小實例-爬蟲

8、深拷貝與淺拷貝

9、文件與目錄

      一、文件讀寫

      二、OS模塊

      三、目錄遍歷

10、異常處理

 

1、安裝、編譯與運行

       Python的安裝很容易,直接到官網:http://www.python.org/下載安裝就能夠了。Ubuntu通常都預安裝了。沒有的話,就能夠#apt-get install python。Windows的話直接下載msi包安裝便可。Python 程序是經過解釋器執行的,因此安裝後,能夠看到Python提供了兩個解析器,一個是IDLE (Python GUI),一個是Python (command line)。前者是一個帶GUI界面的版本,後者實際上和在命令提示符下運行python是同樣的。運行解釋器後,就會有一個命令提示符>>>,在提示符後鍵入你的程序語句,鍵入的語句將會當即執行。就像Matlab同樣。

       另外,Matlab有.m的腳步文件,python也有.py後綴的腳本文件,這個文件除了能夠解釋執行外,還能夠編譯運行,編譯後運行速度要比解釋運行要快。

       例如,我要打印一個helloWorld。

方法1:直接在解釋器中,>>> print ‘helloWorld’。

方法2:將這句代碼寫到一個文件中,例如hello.py。運行這個文件有三種方式:

1)在終端中:python hello.py

2)先編譯成.pyc文件:

import py_compile

py_compile.compile("hello.py")

再在終端中:python hello.pyc

3)在終端中:

python -O -m py_compile hello.py

python hello.pyo

       編譯成.pyc和.pyo文件後,執行的速度會更快。因此通常一些重複性並屢次調用的代碼會被編譯成這兩種可執行的方式來待調用。

 

2、變量、運算與表達式

         這裏沒什麼好說的,有其餘語言的編程基礎的話都沒什麼問題。和Matlab的類似度比較大。這塊差異不是很大。具體以下:

         須要注意的一個是:5/2 等於2,5.0/2纔等於2.5。

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. ###################################  
  2. ### compute #######  
  3. # raw_input() get input from keyboard to string type  
  4. # So we should transfer to int type  
  5. # Some new support computing type:  
  6. # and or not in is < <= != == | ^ & << + - / % ~ **  
  7. print 'Please input a number:'  
  8. number = int(raw_input())   
  9. number += 1  
  10. print number**# ** means ^  
  11. print number and 1  
  12. print number or 1  
  13. print not number  
  14. 5/# is 2  
  15. 5.0/# is 2.5, should be noted  

 

 

3、數據類型

一、數字

         一般的int, long,float,long等等都被支持。並且會看你的具體數字來定義變量的類型。以下:

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. ###################################  
  2. ### type of value #######  
  3. # int, long, float  
  4. # do not need to define the type of value, python will  
  5. # do this according to your value  
  6. num = 1   # stored as int type  
  7. num = 1111111111111   # stored as long int type  
  8. num = 1.0   # stored as float type  
  9. num = 12L # L stands for long type  
  10. num = 1 + 12j # j stands for complex type  
  11. num = '1' # string type  

 

 

二、字符串

         單引號,雙引號和三引號均可以用來定義字符串。三引號能夠定義特別格式的字符串。字符串做爲一種序列類型,支持像Matlab同樣的索引訪問和切片訪問。

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. ###################################  
  2. ### type of string #######  
  3. num = "1" # string type  
  4. num = "Let's go" # string type  
  5. num = "He's \"old\"" # string type  
  6. mail = "Xiaoyi: \n hello \n I am you!"  
  7. mail = """Xiaoyi: 
  8.     hello 
  9.     I am you! 
  10.     """ # special string format  
  11. string = 'xiaoyi' # get value by index  
  12. copy = string[0] + string[1] + string[2:6] # note: [2:6] means [2 5] or[2 6)  
  13. copy = string[:4] # start from 1  
  14. copy = string[2:] # to end  
  15. copy = string[::1] # step is 1, from start to end  
  16. copy = string[::2] # step is 2  
  17. copy = string[-1] # means 'i', the last one  
  18. copy = string[-4:-2:-1] # means 'yoa', -1 step controls direction  
  19. memAddr = id(num) # id(num) get the memory address of num  
  20. type(num) # get the type of num  

 

 

三、元組

         元組tuple用()來定義。至關於一個能夠存儲不一樣類型數據的一個數組。能夠用索引來訪問,但須要注意的一點是,裏面的元素不能被修改。

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. ###################################  
  2. ### sequence type #######  
  3. ## can access the elements by index or slice  
  4. ## include: string, tuple(or array? structure? cell?), list  
  5. # basis operation of sequence type  
  6. firstName = 'Zou'  
  7. lastName = 'Xiaoyi'  
  8. len(string) # the length  
  9. name = firstName + lastName # concatenate 2 string  
  10. firstName * # repeat firstName 3 times  
  11. 'Z' in firstName # check contain or not, return true  
  12. string = '123'  
  13. max(string)  
  14. min(string)  
  15. cmp(firstName, lastName) # return 1, -1 or 0  
  16.   
  17. ## tuple(or array? structure? cell?)  
  18. ## define this type using ()  
  19. user = ("xiaoyi", 25, "male")  
  20. name = user[0]  
  21. age = user[1]  
  22. gender = user[2]  
  23. t1 = () # empty tuple  
  24. t2 = (2, ) # when tuple has only one element, we should add a extra comma  
  25. user[1] = 26 # error!! the elements can not be changed  
  26. name, age, gender = user # can get three element respectively  
  27. a, b, c = (1, 2, 3)  

 

 

四、列表

         列表list用[]來定義。它和元組的功能同樣,不一樣的一點是,裏面的元素能夠修改。List是一個類,支持不少該類定義的方法,這些方法能夠用來對list進行操做。

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. ## list type (the elements can be modified)  
  2. ## define this type using []  
  3. userList = ["xiaoyi", 25, "male"]  
  4. name = userList[0]  
  5. age = userList[1]  
  6. gender = userList[2]  
  7. userList[3] = 88888 # error! access out of range, this is different with Matlab  
  8. userList.append(8888) # add new elements  
  9. "male" in userList # search  
  10. userList[2] = 'female' # can modify the element (the memory address not change)  
  11. userList.remove(8888) # remove element  
  12. userList.remove(userList[2]) # remove element  
  13. del(userList[1]) # use system operation api  
  14. ## help(list.append)  
  15.   
  16. ################################  
  17. ######## object and class ######  
  18. ## object = property + method  
  19. ## python treats anything as class, here the list type is a class,  
  20. ## when we define a list "userList", so we got a object, and we use  
  21. ## its method to operate the elements  

 

 

五、字典

         字典dictionary用{}來定義。它的優勢是定義像key-value這種鍵值對的結構,就像struct結構體的功能同樣。它也支持字典類支持的方法進行建立和操做。

 

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. ################################  
  2. ######## dictionary type ######  
  3. ## define this type using {}  
  4. item = ['name', 'age', 'gender']  
  5. value = ['xiaoyi', '25', 'male']  
  6. zip(item, value) # zip() will produce a new list:   
  7. # [('name', 'xiaoyi'), ('age', '25'), ('gender', 'male')]  
  8. # but we can not define their corresponding relationship  
  9. # and we can define this relationship use dictionary type  
  10. # This can be defined as a key-value manner  
  11. # dic = {key1: value1, key2: value2, ...}, key and value can be any type  
  12. dic = {'name': 'xiaoyi', 'age': 25, 'gender': 'male'}  
  13. dic = {1: 'zou', 'age':25, 'gender': 'male'}  
  14. # and we access it like this: dic[key1], the key as a index  
  15. print dic['name']  
  16. print dic[1]  
  17. # another methods create dictionary  
  18. fdict = dict(['x', 1], ['y', 2]) # factory mode  
  19. ddict = {}.fromkeys(('x', 'y'), -1) # built-in mode, default value is the same which is none  
  20. # access by for circle  
  21. for key in dic  
  22.     print key  
  23.     print dic[key]  
  24.   
  25. # add key or elements to dictionary, because dictionary is out of sequence,  
  26. # so we can directly and a key-value pair like this:  
  27. dic['tel'] = 88888    
  28. # update or delete the elements  
  29. del dic[1] # delete this key  
  30. dic.pop('tel') # show and delete this key  
  31. dic.clear() # clear the dictionary  
  32. del dic # delete the dictionary  
  33. dic.get(1) # get the value of key  
  34. dic.get(1, 'error') # return a user-define message if the dictionary do not contain the key  
  35. dic.keys()  
  36. dic.values()  
  37. dic.has_key(key)  
  38. # dictionary has many operations, please use help to check out  

 

 

4、流程控制

         在這塊,Python與其它大多數語言有個很是不一樣的地方,Python語言使用縮進塊來表示程序邏輯(其它大多數語言使用大括號等)。例如:

if age < 21:

    print("你不能買酒。")

    print("不過你能買口香糖。")

print("這句話處於if語句塊的外面。")

         這個代碼至關於c語言的:

if (age < 21)

{

    print("你不能買酒。")

    print("不過你能買口香糖。")

}

print("這句話處於if語句塊的外面。")

       能夠看到,Python語言利用縮進表示語句塊的開始和退出(Off-side規則),而非使用花括號或者某種關鍵字。增長縮進表示語句塊的開始(注意前面有個:號),而減小縮進則表示語句塊的退出。根據PEP的規定,必須使用4個空格來表示每級縮進(不清楚4個空格的規定如何,在實際編寫中能夠自定義空格數,可是要知足每級縮進間空格數相等)。使用Tab字符和其它數目的空格雖然均可以編譯經過,但不符合編碼規範。

       爲了使咱們本身編寫的程序能很好的兼容別人的程序,咱們最好仍是按規範來,用四個空格來縮減(注意,要麼都是空格,要是麼都製表符,千萬別混用)。

一、if-else

         If-else用來判斷一些條件,以執行知足某種條件的代碼。

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. ################################  
  2. ######## procedure control #####  
  3. ## if else  
  4. if expression: # bool type and do not forget the colon  
  5.     statement(s) # use four space key   
  6.   
  7. if expression:   
  8. statement(s) # error!!!! should use four space key   
  9.       
  10. if 1<2:  
  11.     print 'ok, ' # use four space key  
  12.     print 'yeah' # use the same number of space key  
  13.       
  14. if True: # true should be big letter True  
  15.     print 'true'  
  16.   
  17. def fun():  
  18.     return 1  
  19.   
  20. if fun():  
  21.     print 'ok'  
  22. else:  
  23.     print 'no'  
  24.       
  25. con = int(raw_input('please input a number:'))  
  26. if con < 2:  
  27.     print 'small'  
  28. elif con > 3:  
  29.     print 'big'  
  30. else:  
  31.     print 'middle'  
  32.       
  33. if 1 < 2:  
  34.     if 2 < 3:  
  35.         print 'yeah'  
  36.     else:  
  37.         print 'no'    
  38.     print 'out'  
  39. else:  
  40.     print 'bad'  
  41.   
  42. if 1<and 2<or 2 < not 0: # and, or, not  
  43.     print 'yeah'  

 

 

二、for

         for的做用是循環執行某段代碼。還能夠用來遍歷咱們上面所提到的序列類型的變量。

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. ################################  
  2. ######## procedure control #####  
  3. ## for  
  4. for iterating_val in sequence:  
  5.     statements(s)  
  6. # sequence type can be string, tuple or list  
  7.   
  8. for i in "abcd":  
  9.     print i  
  10.   
  11. for i in [1, 2, 3, 4]:  
  12.     print i  
  13.   
  14. # range(start, end, step), if not set step, default is 1,   
  15. # if not set start, default is 0, should be noted that it is [start, end), not [start, end]  
  16. range(5) # [0, 1, 2, 3, 4]  
  17. range(1, 5) # [1, 2, 3, 4]  
  18. range(1, 10, 2) # [1, 3, 5, 7, 9]  
  19. for i in range(1, 100, 1):   
  20.     print i  
  21.   
  22. # ergodic for basis sequence  
  23. fruits = ['apple', 'banana', 'mango']  
  24. for fruit in range(len(fruits)):   
  25.     print 'current fruit: ', fruits[fruit]  
  26.   
  27. # ergodic for dictionary  
  28. dic = {1: 111, 2: 222, 5: 555}  
  29. for x in dic:  
  30.     print x, ': ', dic[x]  
  31.       
  32. dic.items() # return [(1, 111), (2, 222), (5, 555)]  
  33. for key,value in dic.items(): # because we can: a,b=[1,2]  
  34.     print key, ': ', value  
  35. else:  
  36.     print 'ending'  
  37.   
  38. ################################  
  39. import time  
  40. # we also can use: break, continue to control process  
  41. for x in range(1, 11):  
  42.     print x  
  43.     time.sleep(1) # sleep 1s  
  44.     if x == 3:  
  45.         pass # do nothing  
  46.     if x == 2:  
  47.         continue  
  48.     if x == 6:  
  49.         break  
  50.     if x == 7:    
  51.         exit() # exit the whole program  
  52.     print '#'*50  

 

 

三、while

         while的用途也是循環。它首先檢查在它後邊的循環條件,若條件表達式爲真,它就執行冒號後面的語句塊,而後再次測試循環條件,直至爲假。冒號後面的縮近語句塊爲循環體。

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. ################################  
  2. ######## procedure control #####  
  3. ## while  
  4. while expression:  
  5.     statement(s)  
  6.   
  7. while True:  
  8.     print 'hello'  
  9.     x = raw_input('please input something, q for quit:')  
  10.     if x == 'q':  
  11.         break  
  12. else:  
  13.     print 'ending'  

 

 

四、switch

         其實Python並無提供switch結構,但咱們能夠經過字典和函數輕鬆的進行構造。例如:

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. #############################  
  2. ## switch ####  
  3. ## this structure do not support by python  
  4. ## but we can implement it by using dictionary and function  
  5. ## cal.py ##  
  6. #!/usr/local/python  
  7.   
  8. from __future__ import division  
  9. # if used this, 5/2=2.5, 6/2=3.0  
  10.   
  11. def add(x, y):  
  12.     return x + y  
  13. def sub(x, y):  
  14.     return x - y  
  15. def mul(x, y):  
  16.     return x * y  
  17. def div(x, y):  
  18.     return x / y  
  19.   
  20. operator = {"+": add, "-": sub, "*": mul, "/": div}  
  21. operator["+"](1, 2) # the same as add(1, 2)  
  22. operator["%"](1, 2) # error, not have key "%", but the below will not  
  23. operator.get("+")(1, 2) # the same as add(1, 2)  
  24.   
  25. def cal(x, o, y):  
  26.     print operator.get(o)(x, y)  
  27. cal(2, "+", 3)  
  28. # this method will effect than if-else  

 

 

5、函數

一、自定義函數

         在Python中,使用def語句來建立函數:

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. ################################  
  2. ######## function #####   
  3. def functionName(parameters): # no parameters is ok  
  4.     bodyOfFunction  
  5.   
  6. def add(a, b):  
  7.     return a+b # if we do not use a return, any defined function will return default None   
  8.       
  9. a = 100  
  10. b = 200  
  11. sum = add(a, b)  
  12.   
  13. ##### function.py #####  
  14. #!/usr/bin/python  
  15. #coding:utf8  # support chinese  
  16. def add(a = 1, b = 2): # default parameters  
  17.     return a+b  # can return any type of data  
  18. # the followings are all ok  
  19. add()  
  20. add(2)  
  21. add(y = 1)  
  22. add(3, 4)  
  23.   
  24. ###### the global and local value #####  
  25. ## global value: defined outside any function, and can be used  
  26. ##              in anywhere, even in functions, this should be noted  
  27. ## local value: defined inside a function, and can only be used  
  28. ##              in its own function  
  29. ## the local value will cover the global if they have the same name  
  30. val = 100 # global value  
  31. def fun():  
  32.     print val # here will access the val = 100  
  33. print val # here will access the val = 100, too  
  34.   
  35. def fun():  
  36.     a = 100 # local value  
  37.     print a  
  38. print a # here can not access the a = 100  
  39.   
  40. def fun():  
  41.     global a = 100 # declare as a global value  
  42.     print a  
  43.   
  44. print a # here can not access the a = 100, because fun() not be called yet  
  45. fun()  
  46. print a # here can access the a = 100  
  47.   
  48. ############################  
  49. ## other types of parameters  
  50. def fun(x):  
  51.     print x  
  52. # the follows are all ok  
  53. fun(10) # int  
  54. fun('hello') # string  
  55. fun(('x', 2, 3))  # tuple  
  56. fun([1, 2, 3])    # list  
  57. fun({1: 1, 2: 2}) # dictionary  
  58.   
  59. ## tuple  
  60. def fun(x, y):  
  61.     print "%s : %s" % (x,y) # %s stands for string  
  62. fun('Zou', 'xiaoyi')  
  63. tu = ('Zou', 'xiaoyi')  
  64. fun(*tu)    # can transfer tuple parameter like this  
  65.   
  66. ## dictionary  
  67. def fun(name = "name", age = 0):  
  68.     print "name: %s" % name  
  69.     print "age: " % age  
  70. dic = {name: "xiaoyi", age: 25} # the keys of dictionary should be same as fun()  
  71. fun(**dic) # can transfer dictionary parameter like this  
  72. fun(age = 25, name = 'xiaoyi') # the result is the same  
  73. ## the advantage of dictionary is can specify value name  
  74.   
  75. #############################  
  76. ## redundancy parameters ####  
  77. ## the tuple  
  78. def fun(x, *args): # the extra parameters will stored in args as tuple type   
  79.     print x  
  80.     print args  
  81. # the follows are ok  
  82. fun(10)  
  83. fun(10, 12, 24) # x = 10, args = (12, 24)  
  84.   
  85. ## the dictionary  
  86. def fun(x, **args): # the extra parameters will stored in args as dictionary type   
  87.     print x  
  88.     print args  
  89. # the follows are ok  
  90. fun(10)  
  91. fun(x = 10, y = 12, z = 15) # x = 10, args = {'y': 12, 'z': 15}  
  92.   
  93. # mix of tuple and dictionary  
  94. def fun(x, *args, **kwargs):  
  95.     print x  
  96.     print args  
  97.     print kwargs  
  98. fun(1, 2, 3, 4, y = 10, z = 12) # x = 1, args = (2, 3, 4), kwargs = {'y': 10, 'z': 12}  

 

 

二、Lambda函數

         Lambda函數用來定義一個單行的函數,其便利在於:

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
  1. #############################  
  2. ## lambda function ####  
  3. ## define a fast single line function  
  4. fun = lambda x,y : x*y # fun is a object of function class  
  5. fun(2, 3)  
  6. # like  
  7. def fun(x, y):  
  8.     return x*y  
  9.   
  10. ## recursion  
  11. # 5=5*4*3*2*1, n!  
  12. def recursion(n):  
  13.     if n > 0:  
  14.         return n * recursion(n-1) ## wrong  
  15.   
  16. def mul(x, y):  
  17.     return x * y  
  18. numList = range(1, 5)  
  19. reduce(mul, numList) # 5! = 120  
  20. reduce(lambda x,y : x*y, numList) # 5! = 120, the advantage of lambda function avoid defining a function  
  21.   
  22. ### list expression  
  23. numList = [1, 2, 6, 7]  
  24. filter(lambda x : x % 2 == 0, numList)  
  25. print [x for x in numList if x % 2 == 0] # the same as above  
  26. map(lambda x : x * 2 + 10, numList)  
  27. print [x * 2 + 10 for x in numList] # the same as above  

 

 

三、Python內置函數

       Python內置了不少函數,他們都是一個個的.py文件,在python的安裝目錄能夠找到。弄清它有那些函數,對咱們的高效編程很是有用。這樣就能夠避免重複的勞動了。下面也只是列出一些經常使用的:

 

[python]  view plain copy
 在CODE上查看代碼片派生到個人代碼片
    1. ###################################  
    2. ## built-in function of python ####  
    3. ## if do not how to use, please use help()  
    4. abs, max, min, len, divmod, pow, round, callable,  
    5. isinstance, cmp, range, xrange, type, id, int()  
    6. list(), tuple(), hex(), oct(), chr(), ord(), long()  
    7.   
    8. callable # test a function whether can be called or not, if can, return true  
    9. # or test a function is exit or not  
    10.   
    11. isinstance # test type  
    12. numList = [1, 2]  
    13. if type(numList) == type([]):  
    14.     print "It is a list"  
    15. if isinstance(numList, list): # the same as above, return true  
    16.     print "It is a list"  
    17.       
    18. for i in range(1, 10001) # will create a 10000 list, and cost memory  
    19. for i in xrange(1, 10001)# do not create such a list, no memory is cost  
    20.   
    21. ## some basic functions about string  
    22. str = 'hello world'  
    23. str.capitalize() # 'Hello World', first letter transfer to big  
    24. str.replace("hello", "good") # 'good world'  
    25. ip = "192.168.1.123"  
    26. ip.split('.') # return ['192', '168', '1', '123']  
    27. help(str.split)  
    28.   
    29. import string  
    30. str = 'hello world'  
    31. string.replace(str, "hello", "good") # 'good world'  
    32.   
    33. ## some basic functions about sequence  
    34. len, max, min  
    35. # filter(function or none, sequence)  
    36. def fun(x):  
    37.     if x > 5:  
    38.         return True  
    39. numList = [1, 2, 6, 7]  
    40. filter(fun, numList) # get [6, 7], if fun return True, retain the element, otherwise delete it  
    41. filter(lambda x : x % 2 == 0, numList)  
    42. # zip()  
    43. name = ["me", "you"]  
    44. age = [25, 26]  
    45. tel = ["123", "234"]  
    46. zip(name, age, tel) # return a list: [('me', 25, '123'), ('you', 26, '234')]  
    47. # map()  
    48. map(None, name, age, tel) # also return a list: [('me', 25, '123'), ('you', 26, '234')]  
    49. test = ["hello1", "hello2", "hello3"]  
    50. zip(name, age, tel, test) # return [('me', 25, '123', 'hello1'), ('you', 26, '234', 'hello2')]  
    51. map(None, name, age, tel, test) # return [('me', 25, '123', 'hello1'), ('you', 26, '234', 'hello2'), (None, None, None, 'hello3')]  
    52. a = [1, 3, 5]  
    53. b = [2, 4, 6]  
    54. def mul(x, y):  
    55.     return x*y  
    56. map(mul, a, b) # return [2, 12, 30]  
    57. # reduce()  
    58. reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) # return ((((1+2)+3)+4)+5)  

正則表達式:

相關文章
相關標籤/搜索