Python自動化開發03

2022-08-05 17:03:18 字數 3530 閱讀 4417

1、去重

list_1 = set([1,2,3,4,0,7,4,8])

list2 = set([99,34,6,8,3])

list3 = set([0,4,8])

list4 = set([84,45,49])

print(list_1) <<<

2、 交集

list_1 & list2

print(list_1.intersection(list2)) <<<

3、並集(合集)

list_1 | list2

print(list_1.union(list2)) <<<

4、子集

print(list_1.issubset(list2))   <<<  false

5、父集

print(list_1.issuperset(list3)) <<< true

6、差集

list_1 - list2

print(list_1.difference(list2)) <<<

7、補集

list_1 ^ list2

print(list_1.symmetric_difference(list2)) <<<

8、判斷是否有交集(沒有為true)

print(list_1.isdisjoint(list4)) <<< true

9、小知識點補充

list_1.add(59)    #新增

list_1.update([10,37,42])  #新增多項

list_1.remove(8)   #刪除指定項,沒找到會報錯

list_1.discard(88)   #刪除指定項,沒找到不報錯

list_1.pop()   #隨機刪除

檔案操作

f = open("file.txt","r",encoding="utf-8")

f.read()  ----> 一次性讀所有

f.readline()   -----> 每次讀取一行

f.readlines()  ----> 讀取檔案所有行,生成一個列表,每行為一個元素(只適合於讀小檔案)

f.tell()   ----> 當前檔案所在的指標,按字元個數計數

f.seek(0)  -----> 指標回到最開始位置

f.encoding  -----> 檔案字元編碼

f.seekable  ----->  判斷是否能移動指標位置(

true/false

)f.flush()   ------->  寫入檔案時不一定及時寫入到硬碟,可能還在快取中,

flush

可以用於重新整理使之寫入到硬碟(快取寫到一定值才會寫入硬碟)

f.truncate(10)   ------>  從頭開始截斷,不管指標在哪

##### example #######(記憶體中只儲存一行,可讀取大檔案,讀一行覆蓋一行

)for line in f:

print(line)

########## 列印進度條

##########

import sys,time

for i in range(50):

sys.stdout.write("#")

sys.stdout.flush()

time.sleep(0.1)

r只讀;r+可讀可寫;兩都都不建立

w新建只寫,不能讀;

w+新建讀寫,二者都會將檔案內容清零

w+與r+

區別:r+: 可讀可寫,若檔案不存在,報錯;w+: 可讀可寫,若檔案不存在,建立

########### r+與a+

區別############

fd = open("1.txt",'w+')  

fd.write('123')  

fd = open("1.txt",'r+')  

fd.write('456')  

fd = open("1.txt",'a+')  

fd.write('789')  

結果:456789

說明r+進行了覆蓋寫。

以a,a+的方式開啟檔案,附加方式開啟

(a:附加寫方式開啟,不可讀;

a+:

附加讀寫方式開啟)

以 'u' 標誌開啟檔案

, 所有的行分割符通過

python

的輸入方法(例

#如 read*() )

,返回時都會被替換為換行符

\n. ('ru'

模式也支援

'rb'

選項) .r和u

要求檔案必須存在

不可讀的開啟方式:w和

a若不存在會建立新檔案的開啟方式:a,a+,

w,w+1、函式優點

(1) 減少重複**

(2) **統一性

(3) 可擴充套件性

2、非固定引數

def test1(x, *args):

print(x)

print(args)

def test2(x,**kwargs)

print(x)

print(kwargs)

*args  ----> 接收位置引數變成了元組(包括字典,元組)

**kwargs  -----> 接收關鍵字引數轉成字典

注意:關鍵字引數不能寫在位置引數前面

3、形參和實參

4、區域性變數與全域性變數

區域性變數只在函式裡生效,不會改變全域性變數的值

school = "oldboy"

def change_name(name):

global school    # 定義全域性變數可更改

school

school = "mage"

print("before change",name,school)

name = "alex li"

print("after change",name)

change_name('alex')

print(school)

>>> before change alex mage

>>> after change alex li

>>> mage

字串跟整數不能在函式中改全域性變數,列表、字典、集合都是可以在函式裡面改的

注意:不應該在函式中改全域性變數

5、遞迴特性

(1) 必須有一個明確的結束條件

(2) 每次進入深一層遞迴時,問題規模相經上次遞迴都應有所減少

(3) 遞迴效率不高,遞迴層次過多會導致棧溢位

6、函式與函數語言程式設計

物件導向 ---> 類

----> class

程序導向 ----> 過程

----> def

函數語言程式設計 ----> 函式

----> def

函數語言程式設計:只要輸入是確定的,輸出也是確定的