一:類型和運算
–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數(shù)據(jù)類型:哈希類型、不可哈希類型
# 哈希類型,即在原地不能改變的變量類型,不可變類型??衫胔ash函數(shù)查看其hash值,也可以作為字典的key "數(shù)字類型:int, float, decimal.Decimal, fractions.Fraction, complex" "字符串類型:str, bytes" "元組:tuple" "凍結集合:frozenset" "布爾類型:True, False" "None"# 不可hash類型:原地可變類型:list、dict和set。它們不可以作為字典的key。
– 1.4 數(shù)字常量
1234, -1234, 0, 999999999 # 整數(shù)1.23, 1., 3.14e-10, 4E210, 4.0e+210 # 浮點數(shù)0o177, 0x9ff, 0X9FF, 0b101010 # 八進制、十六進制、二進制數(shù)字3+4j, 3.0+4.0j, 3J # 復數(shù)常量,也可以用complex(real, image)來創(chuàng)建hex(I), oct(I), bin(I) # 將十進制數(shù)轉化為十六進制、八進制、二進制表示的“字符串”int(str, base) # 將字符串轉化為整數(shù),base為進制數(shù)# 2.x中,有兩種整數(shù)類型:一般整數(shù)(32位)和長整數(shù)(無窮精度)。可以用l或L結尾,迫使一般整數(shù)成為長整數(shù)float('inf'), float('-inf'), float('nan') # 無窮大, 無窮小, 非數(shù)
– 1.5 數(shù)字的表達式操作符
yield x # 生成器函數(shù)發(fā)送協(xié)議lambda args: expression # 生成匿名函數(shù)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ù)比較x|y, x&y, x^y # 位或、位與、位異或x<<y, x>>y # 位操作:x左移、右移y位+, -, *, /, //, %, ** # 真除法、floor除法:返回不大于真除法結果的整數(shù)值、取余、冪運算-x, +x, ~x # 一元減法、識別、按位求補(取反)x[i], x[i:j:k], x(……) # 索引、分片、調用int(3.14), float(3) # 強制類型轉換
– 1.6 整數(shù)可以利用bit_length函數(shù)測試所占的位數(shù)
a = 1; a.bit_length() # 1a = 1024; a.bit_length() # 11
– 1.7 repr和str顯示格式的區(qū)別
"""repr格式:默認的交互模式回顯,產(chǎn)生的結果看起來它們就像是代碼。str格式:打印語句,轉化成一種對用戶更加友好的格式。"""
– 1.8 數(shù)字相關的模塊
# math模塊# Decimal模塊:小數(shù)模塊 import decimal from decimal import Decimal Decimal("0.01") + Decimal("0.02") # 返回Decimal("0.03") decimal.getcontext().prec = 4 # 設置全局精度為4 即小數(shù)點后邊4位# Fraction模塊:分數(shù)模塊 from fractions import Fraction x = Fraction(4, 6) # 分數(shù)類型 4/6 x = Fraction("0.25") # 分數(shù)類型 1/4 接收字符串類型的參數(shù)
– 1.9 集合set
"""set是一個無序不重復元素集, 基本功能包括關系測試和消除重復元素。set支持union(聯(lián)合), intersection(交), difference(差)和sysmmetric difference(對稱差集)等數(shù)學運算。set支持x in set, len(set), for x in set。set不記錄元素位置或者插入點, 因此不支持indexing, slicing, 或其它類序列的操作"""s = set([3,5,9,10]) # 創(chuàng)建一個數(shù)值集合,返回{3, 5, 9, 10}t = set("Hello") # 創(chuàng)建一個唯一字符的集合返回{}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中, 但不會同時出現(xiàn)在二者中)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值,不能作為字典的鍵值。同樣的還有l(wèi)ist、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變?yōu)閒rozenset,可哈希
– 1.11 布爾類型bool
type(True) # 返回<class 'bool'>isinstance(False, int) # bool類型屬于整形,所以返回TrueTrue == 1, True is 1 # 輸出(True, False)
– 1.12 動態(tài)類型簡介
"""變量名通過引用,指向對象。Python中的“類型”屬于對象,而不是變量,每個對象都包含有頭部信息,比如"類型標示符" "引用計數(shù)器"等"""#共享引用及在原處修改:對于可變對象,要注意盡量不要共享引用!#共享引用和相等測試: 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 = '' # 空字符串S = "spam’s" # 雙引號和單引號相同S = "s\np\ta\x00m" # 轉義字符S = """spam""" # 三重引號字符串,一般用于函數(shù)說明S = r'\temp' # Raw字符串,不會進行轉義,抑制轉義S = b'Spam' # Python3中的字節(jié)字符串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時,會執(zhí)行該方法
class Dict(dict): def __missing__(self, key): self[key] = [] return self[key]dct = Dict()dct["foo"].append(1) # 這有點類似于collections.defalutdictdct["foo"] # [1]
– 1.26 元組和列表的唯一區(qū)別在于元組是不可變對象,列表時可變對象
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為一個整數(shù) 即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。其實它的內部是通過循環(huán)調用readline()來實現(xiàn)的。如果提供size參數(shù),size是表示讀取內容的總長。fp.readable() # 是否可讀fp.write(str) # 把str寫到文件中,write()并不會在str后加上一個換行符fp.writelines(seq) # 把seq的內容全部寫到文件中(多行一次性寫入)fp.writeable() # 是否可寫fp.close() # 關閉文件。fp.flush() # 把緩沖區(qū)的內容寫入硬盤fp.fileno() # 返回一個長整型的”文件標簽“fp.isatty() # 文件是否是一個終端設備文件(unix系統(tǒng)中的)fp.tell() # 返回文件操作標記的當前位置,以文件的開頭為原點fp.next() # 返回下一行,并將文件操作標記位移到下一行。把一個file用于for … in file這樣的語句時,就是調用next()函數(shù)來實現(xiàn)遍歷的。fp.seek(offset[,whence]) # 將文件打操作標記移到offset的位置。whence可以為0表示從頭開始計算,1表示以當前位置為原點計算。2表示以文件末尾為原點進行計算。fp.seekable() # 是否可以seekfp.truncate([size]) # 把文件裁成規(guī)定的大小,默認的是裁到當前文件操作標記的位置。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. 數(shù)字如果非零,則為真,0為假。 2. 其他對象如果非空,則為真# 通常意義下的類型分類:1. 數(shù)字、序列、映射。 2. 可變類型和不可變類型