国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

python常用庫

2019-11-14 17:31:52
字體:
供稿:網(wǎng)友

Sqlite3

  1. 創(chuàng)建一個Connection對象用于表示一個db,當有多個connection同時訪問db并且有一個進程在修改db時,db一直是被lock的,直到transaction被提交
    import sqlite3conn = sqlite3.connect('example.db')#如果要在RAM中創(chuàng)建db,可以使用特定名字:memory:
     
  2. connect()的常用參數(shù):
    • timeout參數(shù)指定連接等待多久然后拋出異常,默認是5秒.
    • isolation_level:設(shè)置如何開啟tranction,默認遇到DML語句時打開transaction,遇到non-DML語句時提交transaction
    • cached_statements:本次connection可以在緩存中存放的語句數(shù),默認為100
    • uri:boolean型,使用uri指定db,可以指定連接的option,如以只讀方式打開db
      db = sqlite3.connect('file:path/to/database?mode=ro', uri=True)
  3. 創(chuàng)建一個Cursor對象用于執(zhí)行sql命令,要注意sql語句的安全,另外對于execute,executemany和executescript函數(shù)可以直接使用Connection對象調(diào)用,函數(shù)內(nèi)會自動創(chuàng)建cursor,并返回cursor對象
    sql語句
  4. 如果使用execute執(zhí)行完查詢語句后,獲取數(shù)據(jù)可以使用如下方法:
    • 將cursor當做一個iterator,使用for語句每次獲取一行row數(shù)據(jù)
    • 使用fetchone(),每次獲取一行row數(shù)據(jù),最后返回None
    • 使用fetchall(),獲取row的list,沒有數(shù)據(jù)則返回None
  5. 將sqlite不支持的python類型加到sqlite中,首先要將該類型轉(zhuǎn)換成sqlite支持的類型,通常用str。具體方法有兩種:
    • 實現(xiàn)類的__conform__方法
      __conform__

    • 使用sqlite3.register_adapter為類注冊一個adapter方法,將類型轉(zhuǎn)換成str,sqlite3 module內(nèi)部為python的內(nèi)置類型datetime.date和datetime.datetime提供了adapter,將它們轉(zhuǎn)換為iso。
      adapter

      還可以使用sqlite3.register_converter為類注冊一個convert方法,將數(shù)據(jù)庫中的值轉(zhuǎn)換為python類型。為了使sqlite3知道從數(shù)據(jù)庫中查詢出的數(shù)據(jù)的實際類型需要設(shè)置sqlite.connect方法的detect_types參數(shù),值有兩個:
      • 通過declared type(隱式方法)
      • 通過列名(顯示方法)
        detect_type
  6. class sqlite3.Row:表示一行數(shù)據(jù),可以使用列名或者索引下標訪問某列的值

threading-多線程

  1. class threading.Thread(group,target,name,args,kwargs,*,daemon)構(gòu)造函數(shù)中各個參數(shù)的含義:
    • group:保留供未來擴展,現(xiàn)在為None
    • target:callable object,被run方法調(diào)用,默認為None
    • name:線程名,默認格式是”Thread-N”
    • args:target的參數(shù)組成的tuple,默認是()
    • kwargs:target的參數(shù)組成的字典,默認是{}
    • daemon:指定線程是否是守護線程
  2. 創(chuàng)建線程有兩種方式:
    • 在Thread class的構(gòu)造函數(shù)中傳遞一個callable object
    • 繼承Thread class并重寫run方法,繼承類只能重寫__init__和run方法。如果繼承類重寫了__init__,必須在其中顯示調(diào)用基類Thread的__init__
  3. 啟動現(xiàn)成要調(diào)用Thread的start方法,is_alive方法可以判斷現(xiàn)成是否alive,join方法則可以阻塞當前線程直到等待的線程結(jié)束
  4. 線程同步對象:
    • class threading.Lock:線程鎖,每次只能一個線程獲得鎖,類有兩個主要方法:
      • acquire(blocking=True,timeout=-1):用于獲取鎖,成功則返回True,失敗返回False.如果一個線程里兩次獲取鎖就可能造成死鎖
        • blocking:當為Ture時,如果鎖已被其他線程占用,那么要獲取鎖的線程就會阻塞timeout時間,timeout后成功就返回True,失敗就返回False,如果blocking為false,此時不能使用timeout參數(shù),獲取成功直接返回True,獲取失敗直接返回False
        • timeout:線程阻塞的時間,默認值為-1表示無限阻塞
      • release():釋放鎖,release()函數(shù)可以由任意線程執(zhí)行,不必非得在獲取鎖的線程中釋放,如果鎖已經(jīng)被釋放了就會拋出RuntimeError異常
    • class threading.RLock:可重入鎖,與Lock的區(qū)別是RLock鎖可以多次執(zhí)行acquire獲取鎖,但必須執(zhí)行相同的release次數(shù)才能釋放鎖,另外release操作只能在獲取鎖的線程中釋放
    • class threading.Condition(lock=None):條件變量同步,通常與一個鎖關(guān)聯(lián),多個Condition需要共享一個鎖時,可以傳遞一個Lock或RLock給構(gòu)造函數(shù),否則Contition會生成一個RLock鎖,常用方法有:
      • acquire/release:調(diào)用關(guān)聯(lián)鎖的acquire/release方法
      • wait(timeout=None):釋放關(guān)聯(lián)的lock,然后阻塞知道被notify或者notify_all喚醒或者timeout超時,一旦被喚醒或者超時,它將嘗試重新獲得鎖并返回.調(diào)用wait方法的線程之前必須已經(jīng)獲得了鎖,否則會拋出RuntimeError異常
      • notify(n=1):通知n個在等待的線程輪流獲取鎖,調(diào)用notify的線程必須已經(jīng)獲得了鎖,否則會拋出RuntimeError.注意notify函數(shù)并不釋放鎖,所以調(diào)用notify后,在wait的線程只是嘗試獲得鎖,要等到調(diào)用notify的線程調(diào)用release后,嘗試才能成功
      • notify_all():通知所有在等待的線程可以獲取鎖,所有線程回去輪流獲得鎖
    • class threading.Semaphore(value=1):信號量,用于保存一個計數(shù),當計數(shù)為0時阻塞線程直到其他線程調(diào)用release使計數(shù)大于0,常用方法:
      • acquire(blocking=True,timeout=None):如果計數(shù)大于0則減少計數(shù)并返回。如果計數(shù)是0則阻塞當前線程直到其他線程調(diào)用release增加了計數(shù)或者timeout超時。如果有多個線程在阻塞,release會喚醒其中一個,喚醒的線程與阻塞線程的順序無關(guān).如果blocking=False,如果計數(shù)不大于0調(diào)用acquire則會立即返回
      • release:增加計數(shù),計數(shù)的值可以超過最初的value值
    • class threading.BoundedSemaphore(value=1):BoundedSemaphore能保證計數(shù)不超過初始化的value,如果超過value,則會拋出ValueError異常
    • class threading.Event:同步事件,管理一個flag標志,常用方法:
      • set():設(shè)置flag為true,所有在等待的線程都將喚醒
      • is_set():判斷flag是否為true
      • clear():設(shè)置flag為false,之后調(diào)用wait的線程都會阻塞直到set方法重新將flag設(shè)為true
      • wait(timeout=None):如果flag為true時調(diào)用wait會立即返回,如果flag為false,則會阻塞,timeout后則返回。只有當flag為true時wait方法返回true
    • class threading.Timer(interval,function,args=None,kwargs=None):等待interval時間后執(zhí)行function,Timer是Thread的子類,常用方法有:
      • start():開始計時
      • cancel():停止timer,只有timer還在等待時有效
  5. class local:用于管理線程局部數(shù)據(jù),對于同一個local,每個線程會生成一個lcoal副本,線程無法訪問其他線程設(shè)置的屬性
    from threading import Thread,localdata=local()data.name='local'def run():    data.name='run'    print(data.name)thread = Thread(target=run);thread.start()thread.join()print(data.name)
    image
  6. Lock,RLock,Condition,Semaphore和BoundedSemaphore都支持with語句

functools

  1. functools.partial(func,*args,**keyWords)函數(shù):通過包裝手法,允許我們”重新定義”函數(shù)簽名,當函數(shù)的某個或多個參數(shù)值已經(jīng)確定,可以使函數(shù)能用更少的參數(shù)進行調(diào)用.示例如下:
    from functools import partialint2 = partial(int, base=2) # 把base參數(shù)綁定在int2這個函數(shù)里int2('10') # 現(xiàn)在缺省參數(shù)base被設(shè)為2了,相當于int('10',2)
    partial函數(shù)的python實現(xiàn)如下:
    functools.partial
  2. functools.update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS,updated=WRAPPER_UPDATES):通常用于裝飾器函數(shù)且裝飾器函數(shù)中返回一個包裝了原始函數(shù)的函數(shù)的情況,因為這樣原始函數(shù)的metadata(指__name__,__doct__等信息)就會變成封裝函數(shù)的metadata.后兩個參數(shù)的默認值是functools模塊中定義的常量,如下:
    functools.WRAPPER_ASSIGNMENTS('__module__', '__name__', '__qualname__', '__doc__', '__annotations__') functools.WRAPPER_UPDATES('__dict__',)
    調(diào)用update_wrapper與不調(diào)用的區(qū)別,示例如下:
    未調(diào)用update_wrapper
    調(diào)用update_wrapper
  3. functools.wraps(wrapped,assigned=WRAPPER_ASSIGNMENTS,updated=WRAPPER_UPDATES):在裝飾器函數(shù)中定義wrapper函數(shù)時,通常用wraps做wrapper的裝飾器,wraps函數(shù)相當于partial(update_wrapper,wrapped=wrapped,assigned=assigned,updated=updated)
    wraps函數(shù)

sys


  1. sys module能夠訪問python解釋器使用的變量以及與解釋器交互的函數(shù)
  2. sys module中常用的成員有:
    • sys.argv:傳遞給python script的命令行參數(shù),argv[0]是script name. 如果使用-c參數(shù)將命令傳遞給python,則argv[0]值為’-c’
    • sys.executable:獲取python解釋器的路徑,如果python不能獲取路徑將返回空字符串或者None
    • sys.exit([arg]):退出python,該函數(shù)會觸發(fā)SystemExit異常,只能在主線程中調(diào)用,可選參數(shù)arg通常用于表示退出狀態(tài),0表示成功,非0則認為是異常退出.如果arg是其他類型(非整形),那么None相當于0,其他對象則會被輸出到stderr并使exit code為1.如sys.exit('some error message')
    • sys.getdefaultencoding():返回當前默認的字符串編碼,該編碼是一種unicode編碼實現(xiàn),如utf-8
    • sys.getrecursionlimit():返回當前的recursion limit值,可以由setrecursionlimit()函數(shù)設(shè)置
    • sys.getwindowsversion():返回當前windows系統(tǒng)版本信息
    • sys.implementation:返回當前python解釋器的信息
    • sys.modules:子典型,存儲了已經(jīng)加載的module,key是module name
    • sys.path:字符串list,指定了搜尋module的路徑,包含PYTHONPATH的值。程序可以自由修改sys.path
    • sys.stdin,sys.stdout,sys.stderr:用于解釋器標準輸入,輸出,錯誤輸出的文件對象





發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 高台县| 麦盖提县| 夏邑县| 福海县| 新晃| 灵丘县| 揭西县| 奉新县| 长顺县| 呼伦贝尔市| 石门县| 永泰县| 南昌市| 金湖县| 沂源县| 洛南县| 乐昌市| 陈巴尔虎旗| 成安县| 峨眉山市| 泗水县| 泾川县| 屏东县| 江孜县| 广河县| 太原市| 东源县| 长沙市| 长丰县| 柘荣县| 南和县| 灵川县| 蒙山县| 唐山市| 东安县| 会东县| 凤城市| 蚌埠市| 如皋市| 罗田县| 湘潭市|