python 雜記

 

1 導入模塊屢次和導入一次的效果是同樣的python

2 若但願模塊能像程序同樣被執行,可使用-m切換開關來執行,如python -m progname args (運行帶命令行參數args的progname程序)函數

3 模塊真正的用處在於它能夠保持本身的做用域spa

4 告知模塊自己是做爲程序運行仍是導入到其餘程序,須要使用__name__變量,被當作程序執行時,__name__的值是__main__,被導入時,值爲模塊的名字命令行

5 模塊存儲在文件中,包就是模塊所在的目錄,爲了讓python將目錄做爲包對待,目錄必須包含一個__init__.py的文件(模塊)code

6若將__init__.py做爲普通模塊導入的話,__init__.py模塊的內容就是包的內容。如constants包的__init__.py包括PI=3.14,那麼能夠像下面這樣作:import constants  print constants.PI對象

7 很是重要的一個知識點,必定要記住blog

8 __all__繼承

__all__定義了模塊的公有接口接口

若模塊有__all__變量,則__all__表明from 模塊 import * 表明什麼含義內存

不在__all__變量中的函數沒法經過import *導入,如copy模塊中的dispatch_table 不在__all__中,要使用dispatch_table就要經過 from copy import dispatch_table 實現,或先導入copy,再copy.dispatch_table

若模塊沒有__all__,則import * 默認導入模塊中全部不如下劃線開頭的全局變量

9 想看函數的使用說明,能夠打印__doc__,如 print(range.__doc__)

10 找到源碼的位置:print copy.__file__

11 sys.argv列表中,腳本的名字爲sys.argv[0]

12 利用heapq能夠求出前N個最大最小值

import heapq

lyst = [-3, 22, 45, 34, 99, 102, -44]
low3 = heapq.nlargest(3, lyst)
top3 = heapq.nsmallest(3, lyst)

13 

爲了讓特殊字符表現得像普通字符同樣,須要對它進行轉義

profile模塊可用於代碼片斷效率分析;trace模塊能夠提供總的分享

cmd 能夠編寫命令行解釋器

14 
re.search 尋找匹配的字符,找到了返回true,沒找到返回false
re.match 從字符串開頭匹配,

=========================

1 open第3個參數控制着文件的緩衝,取值0則表示無緩衝,直接寫磁盤;取值1則表示直接寫內存,只有flush或close時才寫磁盤;大於1時表明換屆區大小(單位是字節),-1(或其餘負數)表明使用默認緩衝區大小

2 sys.stdin sys.stdout sys.stderr :它們都是文件,大部分文件對象的方法它們也可使用(如read)

3 隨意讀取使用seek:seek(offset,whence),其中offset表示偏移的字節數,whence默認是0,表示從文件開頭開始偏移,取值1時表示從當前位置開始偏移,取值2時表示從文件結尾移動

4 tell返回當前文件的位置

 5 讀取大文件的方法:

with open(path,'r') as f:
    for line in f:
        print(line)
print("+++++++++++")
with open(path,'r') as f:
    while True:
        line=f.readline()
        if line:
            print(line)
        else:
            break
print("+++++++++++")

 6 有雙下劃線的方法是私有方法

7 前面有下劃線的名字都不會被帶星號的Import語句導入(from module import *)

8 判斷一個類是不是另外一個類的子類:issubclass

9 在多重繼承中,若父類中有相同名字的方法,則先繼承的類中的方法會重寫後續繼承的類中的方法

10 判斷方法是否存在:hasattr(Zcy,'haha')

調用方法:getattr(Zcy(),'haha')()

設置方法:

setattr(Zcy,'oo','ouou')
print(Zcy.oo)

def pp():
    print('pp')
setattr(Zcy,'rr',pp)
Zcy.rr()

11 

12 本身的異常類要繼承自 Exception

13 若想將捕獲的異常 傳遞出去,只需調用不帶參數的raise

try:
    print(1/0)
except ZeroDivisionError:
    print("sdf")
    raise 

14 捕獲多個異常

try:
    print(1/'sdf')
except (ZeroDivisionError,TypeError):
    print("sdf")

15 訪問異常對象本是,下面示例中e就是異常對象自己

try:
    ss=1
    print(ss.split(','))
except (ZeroDivisionError,TypeError,AttributeError) as e:
    print(e)

 捕獲全部異經常使用   except Exception as e:

16  調用時間不可知,不建議使用

17 若子類重寫了構造方法,那麼必定要調用父類的構造方法,不然子類可能不能正確的初始化

18 x[-n] 和 x[ len(x)-n] 是同樣的

19 

相關文章
相關標籤/搜索