天天看點

Python基礎

1.python内置了複數:12j+1

2.Python内置的資料類型及轉換函數: complex(),float(),int(),str(),tuple(),list(),dict(),set()

3.在Python中隻有str型字元才是确定的一個字元占一個位元組。在涉及到底層通訊時,需要确定的資料長度時可以參考python-C的資料長度對照表,使用struct子產品将資料轉化成字元再發送。

4.序列:元組tuple、清單list、字典dict、集合set

元組:A=(1,2,3),元素被複值後值不能再改變,如A[0]=5是不對的,元組長度也不能動态增長,但是2個元組能夠相加合并生成一個新的元組。

清單:A=[1,2,3],可以改變元素值和動态增長清單,較常用。擴充清單A.extend([4,5,6,'a']) ,删除元素A.pop(x)

字典:A={"a":1;"b":2;"c":3},可以改變元素值和動态增長字典,使用廣泛。A.keys()傳回關鍵字元組,A.values()傳回值元組。

集合:A=set([1,2,3]),不能直接建立,隻能強制轉換。集合中沒有重複元素。

len()内置函數可以傳回序列中元素的個數。

序列都允許切片: A[m:n]

5.幾個邏輯運算符

not取反;and與;or或

6.循環

while:   for:   可以跟一個else,當while和for不是由break結束而是正常結束(滿結束)時,将執行else.

range(start,end,step) 以step為步進,傳回一個start->end的清單,常用于for中。

7.異常

使用異常需要使用exceptions子產品,可以構造自己的異常類,raise可以抛出一個異常對象

try:

...

if .. raise TypeError("No such Omelet type.")

except 異常類名 as 變量:

8.函數

Python函數功能強大。

def funcname(para1,*para2,**para3)

    para2在funcname内按元組索引通路,它原本就是一個元組

    para3必須以關鍵字的形式輸入,在funcname内部按字典形式通路,它原本就是一個字典。

    定義時使用了*或**,則調用時也必須使用。

 *解散清單和**解散字典的2個作用

 (1)函數形參中表示可變參數清單,*可以在函數中将該可變參數當做清單引用,**可以将該可變參數當做字典引用

 (2)函數調用時,*表示将集合打散為多個函數參數,**表示将字典當做關鍵字形式參數形式輸入

    在函數内部通常需要判斷入參的類型  if type(para1)==int  ; if type(para3)==type({})

9.子產品和包(一個檔案就是一個子產品,一個檔案夾就是一個包)

使用import導入整個子產品和使用from...import...從子產品中導入某個符号的差別。

 a.import modulename  将整個子產品導入到另一個檔案中作為子產品對象,該對象名為modulename,然後可以使用該對象通路對象中的元素。

 b.from modulename import markname 将子產品中的所有符号導入到另一個檔案中作為符号對象,此時modulename中的符号成為該檔案中的公共符号。

包的導入:包目錄下需要一個__init__.py檔案(可以是空的),在__init__.py檔案中可以使用import或from...import...導入該包目錄下的所有子產品,然後當别人調用這個包時就可以直接導入包名。注意區分命名空間。

無論包還是子產品,隻要記住import的導入是一種命名空間的導入即可。當導入了某個名字空間就可以引用該名字空間中的符号。

10.Python的檔案處理

   glob子產品:檔案名通配子產品

   glob.glob("c:\\programfiles\\m*")  列出c:\\programfiles\\下以m開頭的所有檔案

   *  比對多個任意字元

   ?  比對單個字元

   [...]比對[]中任意一個字元

   [!...]比對不在[]中出現的任意字元

shutil子產品,sys子產品,os子產品都包含很多檔案及路徑處理的函數。

11.os子產品和sys子產品

os子產品:(C庫函數中有的,都在此子產品中)

(1)tasks:tools

(2)shell變量:os.environ

(3)運作程式:os.system('指令行'),os.popen('指令行'),os.execv,os.spawn

(4)spawning程序:os.fork,os.pipe,os.waitpid,os.kill

(5)檔案讀寫:os.open,os.read,os.write,os,rename,os.remove,os.mkfifo,os.mkdir,os.rmdir, os.getcwd,os.chdir,os.chmod,os.getpid,os.listdir,os.acess

(6)可移植性工具:os.sep,os.pathsep,os.curdir,os.path.split,os.path.join,os.path.exists, os.path.isdir,os.path.isfile,os.path.getsize,os.path.abspath,os.path.normpath,os.path.listdir, os.path.walk(傳回目前目錄及其子目錄中所有的目錄項清單及其檔案清單)

sys子產品:

(1)平台及版本資訊:sys.platform,sys.maxxize,sys.version

(2)子產品搜尋路徑:sys.path

(3)子產品表:sys.modules (導入檔案中的子產品的名字)

(4)指令行參數:sys.argv

(5)标準流:sys.stdin,sys.stdout,sys.stderr

(6)程式退出調用:sys.exit()

12.python的一些内置函數

(1)數學運算:abs,complex,divmod,float,int,long,pow,range,round,sum,oct,hex,chr,bool,bin

(2)集合類操作:basestring,format,unichr 傳回unicode碼,enumerate()枚舉,iter生成一個疊代器,max,min,list,set,sorted,xrange

(3)邏輯判斷:all(集合)判斷是否全部為真;any()至少一個為真;cmp(x,y)

(4)IO操作:file()生成一個檔案對象;input輸入;prtint輸出;raw_input将使用者輸入看成一個字元串

(5)反射:type,super引用父類,next(iterator),map(func,iterable),len,issubclass(class,classinfo),isinstance(object,classinfo),execfile()相當于exec()

13.Python的類可以有變量、屬性、方法

 "_"單下劃線開頭通常預設為protect類型的

 "__"雙下劃線開頭通常預設為private類型的

 無下劃線通常預設為public類型的

class classname(baseclass):

      a1=0

      a2=0

      def __int__(self,para,...)

          self.a1=0;

          ...

      @property

      def  myfunc1(self,...)

      @myfunc1.setter

      @static

      def  myfunc2(self,...)

14.無名函數lambda

lambda x,y:一句表達式    (傳回表達式結果)

15.深度拷貝 copy子產品

a=3

b=copy.copy(a)   2份a對象

16.urllib子產品可以對網頁操作

page=urllib.urlopen(url)

html=page.read()  讀取網頁代碼

urllib.urlretrieve(url1) 下載下傳網頁中的url1資源

16.yield

yield用于阻塞,使函數傳回并記住目前位置,下次調用從阻塞處開始執行,直到下一個阻塞處。有yield的函數叫做生成器generator,具有next()方法和send()方法。

17.re子產品(正則比對)

re子產品的方法或re.compile生成的正規表達式對象的方法

findall(regex,'字元串')  傳回比對的所有字元

search(regex,'字元串') 傳回比對的所有字元串的位置

finditer(regex,'字元串') 同findall,但傳回的是一個疊代對象,通過疊代得到比對字元

match(regex,'字元串') 在‘字元串’開始位置處比對,傳回一個match對象

re子產品中的函數還可以有第三個屬性入參

 re.S 使比對包括換行符等所有格式字元

 re.I使比對對大小寫不敏感

 re.L做本地化識别

 re.M多行比對,會影響到^和$ (\n為換行符)

 re.X比對時忽略regex中的\n,這樣便于組織正規表達式,可以寫成多行。

18.Python的指令行執行函數

os.system('指令行') 阻塞無傳回

os.popen('指令行') 非阻塞

commands.getoutput('指令行') 執行并傳回結果

19.object對象

繼承了object類的子類叫新型類,可以獲得或重載許多特殊的功能,object類中以__XXX__命名的函數都是特殊函數,能賦予子類特殊的功能,使用者使用這些函數具體實作功能需要在子類中重載。比如__str__()當print子類對象時會調用這個函數,使用者可以在該函數中添加一個資訊。

20.永久字典及SQLite資料庫

永久字典(磁盤字典)屬于一種資料庫,與記憶體字典基本相同,但是關鍵字和值都必須是字元串

 import anydbm

 dicta=anydbm.open('filename','c')

 dicta['a']='1'

 dicta['b']='2'

 dicta['c']='3'

 dicta.close()  #關閉字典

字典資料庫anydbm.open有3種打開選項

‘C’:打開或建立檔案,以便于進行讀寫

‘N’:打開并覆寫原有檔案

‘W’:打開檔案,如果檔案不存在,将抛出一個錯誤資訊。

Python内置的SQLite資料庫

import sqlite3

conn=sqlite3.connect(dsn='dbname',user='tiger',mpassword='scott')

cursor=conn.cursor()

sursor.excute("CREATE table T IF not exist(empid integer,firstname varchar lastname varchar,dept integer)")

conn.commit()

cursor.close()

conn.close()

21.Python對象以及以字元串調用對象中的屬性-反射

(1)import和from...import...的不同:import modulename  将整個子產品導入到另一個檔案中作為子產品對象,該對象名為modulename,然後可以使用該對象通路對象中的元素;from modulename import markname 将子產品中的所有符号導入到另一個檔案中作為符号對象,此時modulename中的符号成為該檔案中的公共符号。

(2)a=__import__("字元串")函數将字元串指定的子產品名導入到另一個檔案中,并傳回一個對象引用

(3)在Python中可以用字元串指定屬性名獲得任意對象(包括子產品)中的屬性:1)globles()函數可以以字典的形式傳回目前子產品中所有對象的字元名和對象引用;2)getattr(對象,"屬性字元串")可以傳回屬性對象的以字元串指定屬性的該對象屬性的引用。比如傳回子產品對象中某個函數引用

(4)Python的反射函數全部都在__buildin__子產品中,常用的反射函數有:

dir(object):以字元串形式列出對象的所有屬性

vars(object):以字典形式列出對象中的所有變量名字及值(不包括函數)

eval('表達式或引用'):能執行一個字元串表達式

sys.module['modulename']  :能以字元串的形式引用已導入的子產品

22.python 子產品的搜尋路徑配置

方法一:函數添加(适合大包内部的小包)

1 import sys

2 檢視sys.path

3 添加sys.path.append("c:\\")

方法二:修改環境變量(适合windows系統)

w使用者可以修改系統環境變量PYTHONPATH

方法三:增加.pth檔案,推薦!

在site-packages添加一個路徑檔案,如mypkpath.pth,必須以.pth為字尾,寫上你要加入的子產品檔案所在的目錄名稱就是了。

 1 windows

    c:\python27\site-packages

 2 linux(ubuntu)

   /usr/local/lib/python2.7/dist-packages

 3 linux(redhat)

   /usr/lib/python2.7/site-packages

繼續閱讀