Date: 2019-05-27html
Author: Sunjava
什麼是自省?python
自省(introspection)是一種自我檢查行爲。程序員
自省是指這種能力:檢查某些事物以肯定它是什麼、它知道什麼以及它能作什麼。自省向程序員提供了極大的靈活性和控制力編程
Python自省機制安全
Python中比較常見的自省(introspection)機制(函數用法)有:help(), dir(),type(), hasattr(), isinstance(),經過這些函數,咱們可以在程序運行時得知對象的類型,判斷對象是否存在某個屬性,訪問對象的屬性。數據結構
dir()多線程
dir() 函數多是 Python 自省機制中最著名的部分了。它返回傳遞給它的任何對象的屬性名稱通過排序的列表。若是不指定對象,則 dir() 返回當前做用域中的名稱。讓咱們將 dir() 函數應用於 keyword 模塊,並觀察它揭示了什麼:閉包
>>> import math >>> dir(math) ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
type() app
type() 函數有助於咱們肯定對象是字符串仍是整數,或是其它類型的對象。它經過返回類型對象來作到這一點,能夠將這個類型對象與 types 模塊中定義的類型相比較:
>>> type(100) <class 'int'> >>> type([]) <class 'list'>
hasattr()
對象擁有屬性,而且 dir()
函數會返回這些屬性的列表。可是,有時咱們只想測試一個或多個屬性是否存在。若是對象具備咱們正在考慮的屬性,那麼一般但願只檢索該屬性。這個任務能夠由 hasattr() 和 getattr() 函數來完成.
>>> dir(int) >>> hasattr(int, '__doc__') True
isinstance()
可使用 isinstance() 函數測試對象,以肯定它是不是某個特定類型或定製類的實例:
>>> isinstance("python", str) True
計算機本質上是一種能夠執行計算的機器,這裏的計算是一種廣義的「計算」,計算機上全部的處理均可以看作是計算。要計算必須的有數據,在程序中如何表示數據呢?
擴展知識:
運行中的程序變量保存在內存中,當執行過程當中須要計算的部分放入CPU
訪問速度:CPU > 內存 > 磁盤
在程序中,咱們通常以變量表示數據,所謂變量:
變量定義: 變量名 = 值(對象) name = '楊冪' #經過type就能夠判斷數據類型 age = 20 student = Student() #類的實例化對象
變量名也可稱之爲標識符(變量名、函數名、類名、報名等統稱爲標識符),其命名要符合python的語法要求:
由數字、字母、下劃線組成,不能以數字開頭
嚴格區分大小寫
不能是python的關鍵字(保留字)
獲取python的保留字 import keyword print(keyword.kwlist) ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
好的變量命名風格應該見名知意,有意義。
小駝峯命名: myBook yourMoney 下劃線分隔: my_book your_money
模塊名:
小寫字母,單詞之間用_分割
eg: my_test.py
包名:
和模塊名同樣
類名:
單詞首字母大寫,採用駝峯式命名規範。
Student
PersonList
函數&方法
函數名應該爲小寫,能夠用下劃線風格單詞以增長可讀性。如:myfunction,my_example_function。
函數和方法的參數
總使用「self」做爲實例方法的第一個參數。總使用「cls」做爲類方法的第一個參數。
全局變量名(類變量,在java中至關於static變量):
大寫字母,單詞之間用_分割
SNUMBER
COLOR_WRITE
普通變量:
小寫字母,單詞之間用_分割
this_is_a_var
實例變量:
大多數狀況在類中, 以_開頭,其餘和普通變量同樣
_price _instance_var
私有實例變量(外部訪問會報錯):
以 _ _ 開頭(2個下劃線),其餘和普通變量同樣
__private_var
專有變量:
_ _ 開頭, _ _結尾,通常爲python的自有變量,不要以這種方式命名
__doc__ __class__
普通函數:
和普通變量同樣:
get_name() count_number() ad_stat()
私有函數(外部訪問會報錯):
以__開頭(2個下劃線),其餘和普通函數同樣
__get_name()
變量輸出
print函數 做用:將數據顯示到屏幕 用法: 顯示字符串 print('hello') 顯示變量 age = 20 print(age) 顯示多個字符串和變量 age = 20 sex = '男' print('俺是大傻',age,sex) 格式化顯示 name = '大傻' age = 20 #%s和%d叫佔位符,替變量站了位置,顯示的時候會用變量的值替換佔位符 #佔位符和和後面小括號裏的變量一一對應 print('俺是%s,俺今年%d歲了'%(name,age)) 常見的佔位符 %s 字符串佔位符 %d 整數的佔位符 %f 浮點數的佔位符
變量輸入
input用於輸入數據給變量 #input括號中字符串用於提示用戶,不用輸入 age = input('請輸入你的年齡') print(age)
刪除後變量就不存在了,不可以在經過變量名進行存取了 del 變量名 #將變量名從內存中刪除掉
python中一切都是對象,python中變量保存了對象的引用,變量的比如是一個容器,容器中保存的變量所指對象的引用(地址);變量自己是沒有類型的,變量的類型是指其所指對象的類型,好比說變量是一個瓶子,盛了醋就是醋瓶,盛了醬油就是醬油瓶
num1 = 10 print(id(num1)) # 查看變量所指對象的地址 print(type(num1)) # 查看變量的類型
變量必須先定義後使用
=兩邊要留一個空格
程序在運行的過程當中,值永遠不會發生改變的量稱之爲常量
python沒有專門的常量類型,通常約定俗成使用大寫表示常量
import math math.pi # 圓周率 PI = 3.1415926 # 個人生日 MY_BIRTHDAY = '2008/2/29'
python解釋器不解釋、不執行註釋
註釋的優勢:
註釋的書寫格式
單行註釋,以#開始,一直到本行結束都是註釋
#這是單行註釋 age = 20 #這也是單行註釋
多行註釋
#1.使用三個單引號 ''' 中間的任何內容都是註釋, 能夠有多行 但中間不能再有三個單引號 ''' #2.使用三個雙引號 """ 中間都是註釋內容 但不能出現三個雙引號 """
注意
按照做用域劃分,能夠分爲:
#1 局部做用域 #局部變量只能在函數內部使用,外部沒法引用 #局部變量的做用域從定義開始到函數體結束 def demo(): num = 20 #局部變量 print(num) demo() #print(num) 錯誤 #函數做用域 # def outter(): x = 10 #函數做用域,從定義開始到本函數結束 def inner(): y = x #在閉包中能夠引用 print(y) return inner pf = outter() pf() #執行閉包 print(pf.__closure__) #全局做用域 x = 100 #全局做用域 從定義開始到本文件結束 def demo(): print(x) print(x) #內建做用域,是指系統內建的函數或常量,在系統載入時加載,在全部模塊中均可以直接引用 #好比說系統函數 print(max(1,2,3)) #max函數就是內建做用域 哪裏均可以引用 def demo(): x = 30 y = 50 print(max(x, y))
以 L --> E --> G -->B 的規則查找,即:在局部找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,最後到內建做用域中找。
定義在函數內部的變量擁有一個局部做用域,被稱爲局部變量
定義在函數外面的變量擁有一個全局做用域,被稱爲全局變量
total = 0 #全局變量 def sum(arg1,arg2): total = arg1 + arg2 #局部變量 print("函數內部:",total) return total sum(10,20) #print(total1) print("函數外部:",total) num = 1 def fun1(): print(num) #UnboundLocalError: local variable 'num' referenced before assignment num = 123 print(num) fun1()
不一樣類型的變量能夠進行的運算是不一樣的,因此必須理解變量的類型,python中數據類型能夠分爲:
內置類型
內置類型分兩個部分:基礎類型(Number,String,Boolean,None)和 容器類型
自定義類型
基礎類型
包含Number,String,Boolean, None
整型(int): python3中只有int一種,能夠表示整數,例如:10,-5,10000
python的int型也是4個字節,就是最大值也只是2^31;可是python 自帶大數整數運算,整數不會溢出,只要內存足夠
浮點型(float): 表示帶小數點的實數,有兩種表示法:
小數表示: 1.9 .23
科學計數法: 用e來表示10的指數,1e2就表明了100,注意e前面必須有數值,e後面必須爲整數
print(float("%.3f" % 12.45623)) #保留小數點後三位浮點數
複數(complex):表示數學上的無理數,形如:a+bj
aComplex = 1.56 + 1.2j bComplex = 1 - 1j print(aComplex.real, aComplex.imag) #顯示aComplex的實部和虛部 aComplex - bComplex #運算 abs(aComplex) #返回複數的模長
布爾型(bool):表示事務的兩種狀態,男女、陰晴、亮暗等,它只有兩個值:True,False
1 print(True==1) # 返回True 2 print(False==0) # 返回True 3 print(1 is True) 4 print(0 is False)
None:表示空對象,通常用於判斷,不一樣於0和空字符
Null表示對象或某種數據類型(數據類型也爲空,python中萬物皆爲對象)爲空,而None表示一種一種特殊的數據類型
>>> s = '' #爲s賦值一個空字符串 >>> print(s) #該行打印了一個空字符串 >>> s == None #可見,None不等於空 False
字符串(str):在python中,可使用字符串表示文本
字符串的表示
# 用單引號表示: 'hello' # 用雙引號表示:"我用python" # 用3個單引號表示:能夠表示多行文本,例如: '''偉大 的 祖國 ''' # 用3個雙引號表示:能夠表示多行文本,例如: """生死看淡, 不服就幹"""
轉義字符:有些特殊字符沒法從鍵盤輸入,可使用轉移字符表示,另外,不管是單引號、雙引號仍是雙引號字符串,在單引號字符串中如何表示一個單引號呢,這也可使用轉義字符表示。常見的轉義字符
轉義字符 | 描述 | 轉義字符 | 描述 |
---|---|---|---|
' | 表示一個普通字符單引號 | \r | 回車 |
" | 表示一個普通字符雙引號 | \r | 回車 |
''' | 一個普通的三單引號 | \\ |
一個普通的字符\ |
""" | 一個普通的三雙引號 | \a | 響鈴 |
\t | tab鍵 | \b | 回刪一個字符 |
a = 'My name's sun'
print(a)
輸出:
My name‘s sun
c = "My name is Peter.\tYour name is Alice."
print(c)
輸出:
My name is Peter. Your name is Alice.
若是將上述的\t換成\n 呢?
若是不但願字符串轉義呢?
在字符串前加上r或者R
c = "My name is Peter.\tYour name is Alice."
print(c)
輸出:
My name is Peter. \tYour name is Alice.
字符串編碼:計算機只能識別二進制,那麼字符串如何存儲到計算機裏呢
計算機不能直接存儲字符串,但咱們能夠將字符編碼,例如用65表示大寫字符A,66表示大寫字符B....等這種表示方式就是美國類的ASCII碼,只能表示127個字符,但對於美國人來講已經足夠了。一但能用整數表示字符,咱們能夠很方便的把整數用二進制表示,那麼字符串也就和容易存儲到計算機了。 但還有不少其餘國家的語言是不能用ASCII表示的,全部ISO組織就推出了unicode碼,用來表示任何一種語言的字符,unicode碼也稱之爲萬國碼,通用碼,能夠表示任何一種語言的任何一個字符。unicdoe碼有多中表示方式,例如:utf-八、utf-1六、utf-32等。通常使用較多的是utf-8,utf-8是一種變長的編碼,表示一個字符可能用一個字節,也多是三個字節 中文經常使用編碼通常用GBK編碼,用2個字節表示一個漢字
chr()函數
是將編碼轉換成對應的字符
print(chr(65)) print(chr(97))
容器類型有:
list:列表, tuple:元組, dict:字典, set:集合
List(列表)
列表是最經常使用的Python數據類型,它能夠做爲一個方括號內的逗號分隔值出現。
列表的數據項不必定須要具備相同的類型
建立一個列表,只要把逗號分隔的不一樣的數據項使用方括號括起來便可。以下所示:
list1 = ['Google', 'Runoob', 1997, 2000]; list2 = list([1, 3, 4, 5]) list3 = ["a", "b", "c", "d"]
—— 雙向鏈表 有序,可變, 操做: 插入(append,insert, extend 任何位置), 刪除(remove, pop,任何位置), 查找(L[index], 任何位置), 遍歷(列表,下標索引)
1 —》 2 —》 3 —》 4
《— 《— 《---
一、追加:names.append()
>> > names.append('e') >> > names ['a', 'b', 'c', 'd', 'e']
二、刪除:pop,remove,del
1)pop()
>> > names.pop() 'e'
若是沒有指定下標,則默認會刪除最後一個元素,如上述例子
>>> names.pop(2) 'c'
指定下標時,就會刪除下標所對應的元素
2)remove()
>>> names.remove('e') >>> names ['a', 'b', 'c', 'd']
3)del
>>> del names[4] >>> names ['a', 'b', 'c', 'd']
三、查找元素所在位置:index()
>>> names.index('c') 2
四、統計元素的次數:count()
>>> names.append('d') >>> names.count('d') 2
五、反轉:reverse()
>>> names.reverse() >>> names ['d', 'c', 'b', 'a']
六、清空:clear()
>>> names.clear() >>> names []
七、插入:insert()
>>> names.insert(2,'devilf') >>> names ['a', 'b', 'devilf', 'c', 'd'] #還有其餘的插入方法: >>> names[3] = 'lebron'
八、排序:sort()按照ascii碼來進行排序
>>> names.insert(4,'&&') >>> names ['a', 'b', 'd', 'devilf', '&&', 'lebron'] >>> names.sort() >>> names ['&&', 'a', 'b', 'd', 'devilf', 'lebron']
九、拼接兩個列表:extend()
>>> names.extend(place) >>> names ['&&', 'a', 'b', 'd', 'devilf', 'lebron', 'beijing', 'shandong', 'usa']
十、對列表進行切片處理
1)列出全部的元素
>>> names[::] ['&&', 'a', 'b', 'd', 'devilf', 'lebron', 'beijing', 'shandong', 'usa']
2)列出最後一個元素,從中間位置開始,列出後面全部的元素
>>> names[-1] 'usa'
案例:列表操做
#1.列表組合 將多個列表拼接爲一個列表 #直接使用加號 list1 = [43,65,76,6] list2 = [45,77,90,11,2,4,66] print(list1 + list2) #產生一個新列表 #2.列表重複 #直接使用乘號 列表元素重複指定遍數,產生一個新列表 print(list1 * 4) #3.成員操做 #成員運算符:in not in #運算的結果爲布爾值 list3 = ["hello",False,189,"good"] print(189 in list3) #True print(180 not in list3) #True #4.列表的截取【分片,切片】 #語法:列表名[開始下標:結束下標:步長],表示按指定步長獲取從開始下標到結束下標之間的元素, # 結果爲一個新的列表,步長默認是1 #注意:包頭不包尾【前閉後開區間】 [開始下標,結束下標) #步長:默認是1,正數表示從左向右取,負數表示從右向左取 list1 = [10,20,30,40,50,60] print(list1[0:3]) #[10,20,30] print(list1[:3]) #[10,20,30] print(list1[:]) #[10,20,30,40,50,60] 從頭取到尾 print(list1[::2]) # [10,30,50] 隔一個取一個 print(list1[3:0:-1]) #[40, 30, 20, 10] 從右向左取 print(list1[-1:-3:-1]) #[60, 50] 從右向左取 print(list1[2:]) #[30, 40, 50, 60] 從下標爲2的元素開始取到末尾 print(list1[-3::-1])#[40, 30, 20, 10] 從右向左取到第一個元素
Tuple(元組)
Python 的元組與列表相似,不一樣之處在於元組的元素不能修改。
元組使用小括號,列表使用方括號。
—— 有序,不可變, 查找(T.index(value, start, end)), 遍歷(列表,下標索引)
>>>tup1 = ('month', 'day', 1997, 2000); >>> tup2 = (1, 2, 3, 4, 5 ); >>> tup3 = "a", "b", "c", "d"; # 不須要括號也能夠 >>> type(tup3) <class 'tuple'> #建立空元組 tup1 = ();
注意:
元組中只包含一個元素時,須要在元素後面添加逗號,不然括號會被看成運算符使用:
>> > tup1 = (50) >> > type(tup1) # 不加逗號,類型爲整型 <class 'int'> >> > tup1 = (50,) >> > type(tup1) # 加上逗號,類型爲元組 <class 'tuple'>
元組與字符串相似,下標索引從0開始,能夠進行截取,組合等。
元組可使用下標索引來訪問元組中的值,以下實例:
tup1 = ('Google', 'baidu', 1997, 2000) tup2 = (1, 2, 3, 4, 5, 6, 7) print("tup1[0]: ", tup1[0]) print("tup2[1:5]: ", tup2[1:5])
修改元組
元組中的元素值是不容許修改的,但咱們能夠對元組進行鏈接組合,以下實例:
tup1 = (12, 34.56); tup2 = ('abc', 'xyz') # 如下修改元組元素操做是非法的。 # tup1[0] = 100 # 建立一個新的元組 tup3 = tup1 + tup2; print(tup3)
元組中的元素值是不容許刪除的,但咱們可使用del語句來刪除整個元組,以下實例:
tuple = ('Google', 'baidu', 1997, 2000) print(tuple) del tuple; print("刪除後的元組 tuple : ") print(tuple)
以上實例元組被刪除後,輸出變量會有異常信息,輸出以下所示:
刪除後的元組 tuple : Traceback (most recent call last): File "test.py", line 8, in <module> print (tuple) NameError: name 'tuple' is not defined
enumerate() 方法
seasons = ['Spring', 'Summer', 'Autumn', 'Winter'] list(enumerate(seasons)) list(enumerate(seasons, start=1)) # 下標從 1 開始
>>>seq = ['one', 'two', 'three'] >>> for i, element in enumerate(seq): ... print(i, element)
Dictionary(字典)
字典是一種可變容器模型,且可存儲任意類型對象。
字典的每一個鍵值(key=>value)對用冒號(:)分割,每一個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式以下所示:
d = {key1 : value1, key2 : value2 }
鍵必須是惟一的,但值則沒必要。
值能夠取任何數據類型,但鍵必須是不可變的,如字符串,數字或元組。
一個簡單的字典實例:
dict = {'A': '11111', 'B': '2222', 'C': '3333'}
— — key-value鍵值對。
建立(1. mdict={'key':value}, 2.mdict=dict(key=value))
插入:mdict[key] = value 獲取:key獲取value數據(get, pop)
查找:mdict[key], mdict.get(key), 遍歷(安裝mdict.keys()遍歷key,由mdict[key]獲取value)
把相應的鍵放入到方括號中,以下實例:
dict = {'Name': 'Andy', 'Age': 37, 'Class': 'Hongkong'} print("dict['Name']: ", dict['Name']) print("dict['Age']: ", dict['Age'])
若是用字典裏沒有的鍵訪問數據,會輸出沒有key錯誤:KeyError
修改字典
向字典添加新內容的方法是增長新的鍵/值對,修改或刪除已有鍵/值對
dict = {'Name': 'Andy', 'Age': 37, 'Class': 'Hongkong'} dict['Age'] = 48; # 更新 Age dict['School'] = "清華大學" # 添加信息 print("dict['Age']: ", dict['Age']) print("dict['School']: ", dict['School'])
刪除字典元素
能刪單一的元素也能清空字典,清空只需一項操做。
顯示刪除一個字典用del命令
del dict['Name'] # 刪除鍵 'Name' dict.clear() # 清空字典 del dict # 刪除字典 print("dict['Age']: ", dict['Age']) print("dict['School']: ", dict['School'])
這會引起一個異常,由於用執行 del 操做後字典再也不存在
字典鍵特性
字典值能夠是任何的 python 對象,既能夠是標準的對象,也能夠是用戶定義的,但鍵不行
1)不容許同一個鍵出現兩次。建立時若是同一個鍵被賦值兩次,後一個值會被記住
2)鍵必須不可變,因此能夠用數字,字符串或元組充當,而用列表就不行
eg:
dict = {['Name']: 'Andy', 'Age': 37, 'Class': 'Hongkong'} print("dict['Name']: ", dict['Name'])
此時,就會出異常,TypeError: unhashable type: 'list' 錯誤
其餘使用方法
len(dict) 計算字典元素個數,即鍵的總數
str(dict) 輸出字典,以可打印的字符串表示。
Set (集合)
集合(set)是一個無序的不重複元素序列
可使用大括號 { } 或者 set() 函數建立集合
集合對象還支持union(聯合), intersection(交), difference(差)等操做。
做用:(1)去重 (2)運算:交集(intersection),並集(union)
>>>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} >>> print(basket) # 這裏演示的是去重功能 {'orange', 'banana', 'pear', 'apple'} >>> 'orange' in basket # 快速判斷元素是否在集合內 True >>> 'crabgrass' in basket False
# 下面展現兩個集合間的運算. >>> a = set('abracadabra') >>> b = set('alacazam') >>> a {'a', 'r', 'b', 'c', 'd'} >>> a - b # 集合a中包含而集合b中不包含的元素 {'r', 'd', 'b'} >>> a | b # 集合a或b中包含的全部元素 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'} >>> a & b # 集合a和b中都包含了的元素 {'a', 'c'} >>> a ^ b # 不一樣時包含於a和b的元素 {'r', 'd', 'b', 'm', 'z', 'l'}
一樣集合支持集合推導式
>>>a = {x for x in 'abcbde' if x not in 'abc'} >>> a {'d', 'e'}
添加元素
s.add( x )
將元素 x 添加到集合 s 中,若是元素已存在,則不進行任何操做。
>>>thisset = set(("baidu", "Alibaba", "Tenxun")) >>> thisset.add("Facebook") >>> print(thisset) {'Tenxun', 'Facebook', 'baidu', 'Alibaba'}
還有一個方法,也能夠添加元素,且參數能夠是列表,元組,字典等
語法格式以下:
s.update( x ) # x 能夠有多個,用逗號分開。
>>>thisset = set(("Google", "baidu", "Taobao")) >>> thisset.update({1,3}) >>> print(thisset) {1, 3, 'Google', 'Taobao', 'baidu'} >>> thisset.update([1,4],[5,6]) >>> print(thisset) {1, 3, 4, 5, 6, 'Google', 'Taobao', 'baidu'}
移除元素
s.remove( x )
將元素 x 從集合 s 中移除,若是元素不存在,則會發生錯誤。
>>>thisset = set(("Google", "Runoob", "Taobao")) >>>thisset.remove("Taobao") >>> print(thisset) {'Google', 'Runoob'} >>>thisset.remove("Facebook") # 不存在會發生錯誤 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'Facebook'
此外還有一個方法也是移除集合中的元素,且若是元素不存在,不會發生錯誤,以下discard函數
s.discard( x )
清空集合
s.clear()
判斷元素 x 是否在集合
x in s
判斷元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> "Runoob" in thisset True >>> "Facebook" in thisset False
方法 | 描述 |
---|---|
add() | 爲集合添加元素 |
clear() | 移除集合中的全部元素 |
copy() | 拷貝一個集合 |
difference() | 返回多個集合的差集 |
difference_update() | 移除集合中的元素,該元素在指定的集合也存在。 |
discard() | 刪除集合中指定的元素 |
intersection() | 返回集合的交集 |
intersection_update() | 刪除集合中的元素,該元素在指定的集合中不存在。 |
isdisjoint() | 判斷兩個集合是否包含相同的元素,若是沒有返回 True,不然返回 False。 |
issubset() | 判斷指定集合是否爲該方法參數集合的子集。 |
issuperset() | 判斷該方法的參數集合是否爲指定集合的子集 |
pop() | 隨機移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回兩個集合中不重複的元素集合。 |
symmetric_difference_update() | 移除當前集合中在另一個指定集合相同的元素,並將另一個指定集合中不一樣的元素插入到當前集合中。 |
union() | 返回兩個集合的並集 |
update() | 給集合添加元素 |
Queue (隊列)
Queue是python標準庫中的線程安全的隊列(FIFO)實現,提供了一個適用於多線程編程的先進先出的數據結構,即隊列,用來在生產者和消費者線程之間的信息傳遞
— 存儲先進先出的對象
建立方式:mq = queue.Queue(maxsize=0)
插入:put, put_nowait, 取數據:get, get_nowait
from queue import Queue #LILO隊列 q = Queue() #建立隊列對象 q.put(0) #在隊列尾部插入元素 q.put(1) q.put(2) print('LILO隊列',q.queue) #查看隊列中的全部元素 print(q.get()) #返回並刪除隊列頭部元素 print(q.queue) from queue import LifoQueue #LIFO隊列 lifoQueue = LifoQueue() lifoQueue.put(1) lifoQueue.put(2) lifoQueue.put(3) print('LIFO隊列',lifoQueue.queue) lifoQueue.get() #返回並刪除隊列尾部元素 lifoQueue.get() print(lifoQueue.queue) from queue import PriorityQueue #優先隊列 priorityQueue = PriorityQueue() #建立優先隊列對象 priorityQueue.put(3) #插入元素 priorityQueue.put(78) #插入元素 priorityQueue.put(100) #插入元素 print(priorityQueue.queue) #查看優先級隊列中的全部元素 priorityQueue.put(1) #插入元素 priorityQueue.put(2) #插入元素 print('優先級隊列:',priorityQueue.queue) #查看優先級隊列中的全部元素 priorityQueue.get() #返回並刪除優先級最低的元素 print('刪除後剩餘元素',priorityQueue.queue) priorityQueue.get() #返回並刪除優先級最低的元素 print('刪除後剩餘元素',priorityQueue.queue) #刪除後剩餘元素 priorityQueue.get() #返回並刪除優先級最低的元素 print('刪除後剩餘元素',priorityQueue.queue) #刪除後剩餘元素 priorityQueue.get() #返回並刪除優先級最低的元素 print('刪除後剩餘元素',priorityQueue.queue) #刪除後剩餘元素 priorityQueue.get() #返回並刪除優先級最低的元素 print('所有被刪除後:',priorityQueue.queue) #查看優先級隊列中的全部元素 from collections import deque #雙端隊列 dequeQueue = deque(['Eric','John','Smith']) print(dequeQueue) dequeQueue.append('Tom') #在右側插入新元素 dequeQueue.appendleft('Terry') #在左側插入新元素 print(dequeQueue) dequeQueue.rotate(2) #循環右移2次 print('循環右移2次後的隊列',dequeQueue) dequeQueue.popleft() #返回並刪除隊列最左端元素 print('刪除最左端元素後的隊列:',dequeQueue) dequeQueue.pop() #返回並刪除隊列最右端元素 print('刪除最右端元素後的隊列:',dequeQueue)
Collections
Counter, defaultdict, deque, namedtuple, OrderedDict
見下節《2-Collections庫使用》
自定義類型:類
類是一種高級抽象,就是一種高級的數據類型,是對象的藍圖,就是用來定義你要用的對象的屬性和行爲的
class MyClass: """一個簡單的類實例""" i = 12345 def f(self): return 'hello world' # 實例化類 x = MyClass() # 訪問類的屬性和方法 print("MyClass 類的屬性 i 爲:", x.i) print("MyClass 類的方法 f 輸出爲:", x.f())