
一:類型和運算
–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"
"凍結(jié)集合: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 # 復(fù)數(shù)常量,也可以用complex(real, image)來創(chuàng)建
hex(I), oct(I), bin(I) # 將十進制數(shù)轉(zhuǎn)化為十六進制、八進制、二進制表示的“字符串”
int(str, base) # 將字符串轉(zhuǎn)化為整數(shù),base為進制數(shù)
# 2.x中,有兩種整數(shù)類型:一般整數(shù)(32位)和長整數(shù)(無窮精度)??梢杂胠或L結(jié)尾,迫使一般整數(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除法:返回不大于真除法結(jié)果的整數(shù)值、取余、冪運算
-x, +x, ~x # 一元減法、識別、按位求補(取反)
x[i], x[i:j:k], x(……) # 索引、分片、調(diào)用
int(3.14), float(3) # 強制類型轉(zhuǎn)換
– 1.6 整數(shù)可以利用bit_length函數(shù)測試所占的位數(shù)
a = 1; a.bit_length() # 1
a = 1024; a.bit_length() # 11
– 1.7 repr和str顯示格式的區(qū)別
"""
repr格式:默認的交互模式回顯,產(chǎn)生的結(jié)果看起來它們就像是代碼。
str格式:打印語句,轉(zhuǎn)化成一種對用戶更加友好的格式。
"""
– 1.8 數(shù)字相關(guān)的模塊
# math模塊
# Decimal模塊:小數(shù)模塊
import decimal
from decimal import Decimal
Decimal("0.01") + Decimal("0.02") # 返回Decimal("0.03")
decimal.getcontext().prec = 4 # 設(shè)置全局精度為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是一個無序不重復(fù)元素集, 基本功能包括關(guān)系測試和消除重復(fù)元素。
set支持union(聯(lián)合), intersection(交), difference(差)和sysmmetric difference(對稱差集)等數(shù)學(xué)運算。
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]} # 集合解析,結(jié)果:{16, 1, 4, 9}
{x for x in 'spam'} # 集合解析,結(jié)果:{'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類型屬于整形,所以返回True
True == 1, True is 1 # 輸出(True, False)
– 1.12 動態(tài)類型簡介
"""
變量名通過引用,指向?qū)ο蟆?Python中的“類型”屬于對象,而不是變量,每個對象都包含有頭部信息,比如"類型標(biāo)示符" "引用計數(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" # 轉(zhuǎn)義字符
S = """spam""" # 三重引號字符串,一般用于函數(shù)說明
S = r'\temp' # Raw字符串,不會進行轉(zhuǎn)義,抑制轉(zhuǎn)義
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) # 字符串迭代,成員關(guān)系
[x*2 for x in s] # 字符串列表解析
','.join(['a', 'b', 'c']) # 字符串輸出,結(jié)果: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__:當(dāng)查找找不到key時,會執(zhí)行該方法
class Dict(dict):
def __missing__(self, key):
self[key] = []
return self[key]
dct = Dict()
dct["foo"].append(1) # 這有點類似于collections.defalutdict
dct["foo"] # [1]
– 1.26 元組和列表的唯一區(qū)別在于元組是不可變對象,列表時可變對象
a = [1, 2, 3] # a[1] = 0, OK
a = (1, 2, 3) # a[1] = 0, Error
a = ([1, 2]) # a[0][1] = 0, OK
a = [(1, 2)] # a[0][1] = 0, Error
– 1.27 元組的特殊語法: 逗號和圓括號
D = (12) # 此時D為一個整數(shù) 即D = 12
D = (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。其實它的內(nèi)部是通過循環(huán)調(diào)用readline()來實現(xiàn)的。如果提供size參數(shù),size是表示讀取內(nèi)容的總長。
fp.readable() # 是否可讀
fp.write(str) # 把str寫到文件中,write()并不會在str后加上一個換行符
fp.writelines(seq) # 把seq的內(nèi)容全部寫到文件中(多行一次性寫入)
fp.writeable() # 是否可寫
fp.close() # 關(guān)閉文件。
fp.flush() # 把緩沖區(qū)的內(nèi)容寫入硬盤
fp.fileno() # 返回一個長整型的”文件標(biāo)簽“
fp.isatty() # 文件是否是一個終端設(shè)備文件(unix系統(tǒng)中的)
fp.tell() # 返回文件操作標(biāo)記的當(dāng)前位置,以文件的開頭為原點
fp.next() # 返回下一行,并將文件操作標(biāo)記位移到下一行。把一個file用于for … in file這樣的語句時,就是調(diào)用next()函數(shù)來實現(xiàn)遍歷的。
fp.seek(offset[,whence]) # 將文件打操作標(biāo)記移到offset的位置。whence可以為0表示從頭開始計算,1表示以當(dāng)前位置為原點計算。2表示以文件末尾為原點進行計算。
fp.seekable() # 是否可以seek
fp.truncate([size]) # 把文件裁成規(guī)定的大小,默認的是裁到當(dāng)前文件操作標(biāo)記的位置。
for line in open('data'):
print(line) # 使用for語句,比較適用于打開比較大的文件
open('f.txt', encoding = 'latin-1') # Python3.x Unicode文本文件
open('f.bin', 'rb') # Python3.x 二進制bytes文件
# 文件對象還有相應(yīng)的屬性:buffer closed encoding errors line_buffering name newlines等
– 1.29 其他
# Python中的真假值含義:1. 數(shù)字如果非零,則為真,0為假。 2. 其他對象如果非空,則為真
# 通常意義下的類型分類:1. 數(shù)字、序列、映射。 2. 可變類型和不可變類型
|