標籤:clear 增強 str 參數 字串 技術分享 雜湊 資料 mat
一:類型和運算–1.1 尋求協助:
dir(obj) # 簡單的列出對象obj所包含的方法名稱,返回一個字串列表help(obj.func) # 查詢obj.func的具體介紹和用法
– 1.2 測試類型的三種方法,推薦第三種
if type(L) == type([]): print("L is list")if type(L) == list: print("L is list")if isinstance(L, list): print("L is list")
– 1.3 Python資料類型:雜湊類型、不可雜湊類型
# 雜湊類型,即在原地不能改變的變數類型,不可變類型。可利用hash函數查看其hash值,也可以作為字典的key "數字類型:int, float, decimal.Decimal, fractions.Fraction, complex" "字串類型:str, bytes" "元組:tuple" "凍結集合:frozenset" "布爾類型:True, False" "None"# 不可hash類型:原地可變類型:list、dict和set。它們不可以作為字典的key。
– 1.4 數字常量
1234, -1234, 0, 999999999 # 整數1.23, 1., 3.14e-10, 4E210, 4.0e+210 # 浮點數0o177, 0x9ff, 0X9FF, 0b101010 # 八進位、十六進位、位元字3+4j, 3.0+4.0j, 3J # 複數常量,也可以用complex(real, image)來建立hex(I), oct(I), bin(I) # 將十進位數轉化為十六進位、八進位、二進位表示的“字串”int(str, base) # 將字串轉化為整數,base為進位數# 2.x中,有兩種整數類型:一般整數(32位)和長整數(無窮精度)。可以用l或L結尾,迫使一般整數成為長整數float(‘inf‘), float(‘-inf‘), float(‘nan‘) # 無窮大, 無窮小, 非數
– 1.5 數位運算式操作符
yield x # 產生器函數發送協議lambda args: expression # 產生匿名函數x if y else z # 三元選擇運算式x and y, x or y, not x # 邏輯與、邏輯或、邏輯非x in y, x not in y # 成員對象測試x is y, x is not y # 對象實體測試x<y, x<=y, x>y, x>=y, x==y, x!=y # 大小比較,集合子集或超集值相等性操作符1 < a < 3 # Python中允許連續比較x|y, x&y, x^y # 位或、位與、位異或x<<y, x>>y # 位操作:x左移、右移y位+, -, *, /, //, %, ** # 真除法、floor除法:返回不大於真除法結果的整數值、取餘、冪運算-x, +x, ~x # 一元減法、識別、按位求補(取反)x[i], x[i:j:k], x(……) # 索引、分區、調用int(3.14), float(3) # 強制類型轉換
– 1.6 整數可以利用bit_length函數測試所佔的位元
a = 1; a.bit_length() # 1a = 1024; a.bit_length() # 11
– 1.7 repr和str顯示格式的區別
"""repr格式:預設的互動模式回顯,產生的結果看起來它們就像是代碼。str格式:列印語句,轉化成一種對使用者更加友好的格式。"""
– 1.8 數字相關的模組
# math模組# Decimal模組:小數模組 import decimal from decimal import Decimal Decimal("0.01") + Decimal("0.02") # 返回Decimal("0.03") decimal.getcontext().prec = 4 # 設定全域精度為4 即小數點後邊4位# Fraction模組:分數模組 from fractions import Fraction x = Fraction(4, 6) # 分數類型 4/6 x = Fraction("0.25") # 分數類型 1/4 接收字串類型的參數
– 1.9 集合set
"""set是一個無序不重複元素集, 準系統包括關係測試和消除重複元素。set支援union(聯合), intersection(交), difference(差)和sysmmetric difference(對稱差集)等數學運算。set支援x in set, len(set), for x in set。set不記錄元素位置或者插入點, 因此不支援indexing, slicing, 或其它類序列的操作"""s = set([3,5,9,10]) # 建立一個數值集合,返回{3, 5, 9, 10}t = set("Hello") # 建立一個唯一字元的集合返回{}a = t | s t.union(s) # t 和 s的並集b = t & s t.intersection(s) # t 和 s的交集c = t – s t.difference(s) # 求差集(項在t中, 但不在s中) d = t ^ s t.symmetric_difference(s) # 對稱差集(項在t或s中, 但不會同時出現在二者中)t.add(‘x‘) t.remove(‘H‘) # 增加/刪除一個item t.update([10,37,42]) # 利用[......]更新s集合x in s, x not in s # 集合中是否存在某個值s.issubset(t) s.issuperset(t) s.copy() s.discard(x) s.clear(){x**2 for x in [1, 2, 3, 4]} # 集合解析,結果:{16, 1, 4, 9}{x for x in ‘spam‘} # 集合解析,結果:{‘a‘, ‘p‘, ‘s‘, ‘m‘}
– 1.10 集合frozenset,不可變對象
"""set是可變對象,即不存在hash值,不能作為字典的索引值。同樣的還有list、tuple等frozenset是不可變對象,即存在hash值,可作為字典的索引值frozenset對象沒有add、remove等方法,但有union/intersection/difference等方法"""a = set([1, 2, 3])b = set()b.add(a) # error: set是不可雜湊類型b.add(frozenset(a)) # ok,將set變為frozenset,可雜湊
– 1.11 布爾類型bool
type(True) # 返回<class ‘bool‘>isinstance(False, int) # bool類型屬於整形,所以返回TrueTrue == 1, True is 1 # 輸出(True, False)
– 1.12 動態類型簡介
"""變數名通過引用,指向對象。Python中的“類型”屬於對象,而不是變數,每個對象都包含有頭部資訊,比如"類型標示符" "引用計數器"等"""#共用引用及在原處修改:對於可變對象,要注意盡量不要共用引用!#共用引用和相等測試: L = [1], M = [1], L is M # 返回False L = M = [1, 2, 3], L is M # 返回True,共用引用#增強賦值和共用引用:普通+號會產生新的對象,而增強賦值+=會在原處修改 L = M = [1, 2] L = L + [3, 4] # L = [1, 2, 3, 4], M = [1, 2] L += [3, 4] # L = [1, 2, 3, 4], M = [1, 2, 3, 4
– 1.13 常見字串常量和運算式
S = ‘‘ # Null 字元串S = "spam’s" # 雙引號和單引號相同S = "s\np\ta\x00m" # 逸出字元S = """spam""" # 三重引號字串,一般用於函數說明S = r‘\temp‘ # Raw字串,不會進行轉義,抑制轉義S = b‘Spam‘ # Python3中的位元組字串S = u‘spam‘ # Python2.6中的Unicode字串s1+s2, s1*3, s[i], s[i:j], len(s) # 字串操作‘a %s parrot‘ % ‘kind‘ # 字串格式化運算式‘a {0} parrot‘.format(‘kind‘) # 字串格式化方法for x in s: print(x) # 字串迭代,成員關係[x*2 for x in s] # 字串列表解析‘,‘.join([‘a‘, ‘b‘, ‘c‘]) # 字串輸出,結果:a,b,c
– 1.24 字典解析
D = {k:8 for k in [‘s‘, ‘d‘]} # {‘d‘: 8, ‘s‘: 8}D = {k:v for (k, v) in zip([‘name‘, ‘age‘], [‘tom‘, 12])}
– 1.25 字典的特殊方法__missing__:當尋找找不到key時,會執行該方法
class Dict(dict): def __missing__(self, key): self[key] = [] return self[key]dct = Dict()dct["foo"].append(1) # 這有點類似於collections.defalutdictdct["foo"] # [1]
– 1.26 元組和列表的唯一區別在於元組是不可變對象,列表時可變對象
a = [1, 2, 3] # a[1] = 0, OKa = (1, 2, 3) # a[1] = 0, Errora = ([1, 2]) # a[0][1] = 0, OKa = [(1, 2)] # a[0][1] = 0, Error
– 1.27 元組的特殊文法: 逗號和圓括弧
D = (12) # 此時D為一個整數 即D = 12D = (12, ) # 此時D為一個元組 即D = (12, )
– 1.28 檔案基本操作
output = open(r‘C:\spam‘, ‘w‘) # 開啟輸出檔案,用於寫input = open(‘data‘, ‘r‘) # 開啟輸入檔案,用於讀。開啟的方式可以為‘w‘, ‘r‘, ‘a‘, ‘wb‘, ‘rb‘, ‘ab‘等fp.read([size]) # size為讀取的長度,以byte為單位fp.readline([size]) # 讀一行,如果定義了size,有可能返回的只是一行的一部分fp.readlines([size]) # 把檔案每一行作為一個list的一個成員,並返回這個list。其實它的內部是通過迴圈調用readline()來實現的。如果提供size參數,size是表示讀取內容的總長。fp.readable() # 是否可讀fp.write(str) # 把str寫到檔案中,write()並不會在str後加上一個分行符號fp.writelines(seq) # 把seq的內容全部寫到檔案中(多行一次性寫入)fp.writeable() # 是否可寫fp.close() # 關閉檔案。fp.flush() # 把緩衝區的內容寫入硬碟fp.fileno() # 返回一個長整型的”檔案標籤“fp.isatty() # 檔案是否是一個終端裝置檔案(unix系統中的)fp.tell() # 返迴文件操作標記的當前位置,以檔案的開頭為原點fp.next() # 返回下一行,並將檔案操作標記位移到下一行。把一個file用於for … in file這樣的語句時,就是調用next()函數來實現遍曆的。fp.seek(offset[,whence]) # 將檔案打操作標記移到offset的位置。whence可以為0表示從頭開始計算,1表示以當前位置為原點計算。2表示以檔案末尾為原點進行計算。fp.seekable() # 是否可以seekfp.truncate([size]) # 把檔案裁成規定的大小,預設的是裁到當前檔案操作標記的位置。for line in open(‘data‘): print(line) # 使用for語句,比較適用於開啟比較大的檔案open(‘f.txt‘, encoding = ‘latin-1‘) # Python3.x Unicode文字檔open(‘f.bin‘, ‘rb‘) # Python3.x 二進位bytes檔案# 檔案對象還有相應的屬性:buffer closed encoding errors line_buffering name newlines等
– 1.29 其他
# Python中的真假值含義:1. 數字如果非零,則為真,0為假。 2. 其他對象如果非空,則為真# 通常意義下的類型分類:1. 數字、序列、映射。 2. 可變類型和不可變類型
Python基礎知識點:類型和運算