第4課 函式 模組 集合

2022-06-24 19:45:14 字數 4403 閱讀 6033

1. 檔案讀寫:b模式

import requests 

url = ''

img = requests.get(url).content f = open('hhh.jpg', 'wb') # bytes:以二進位制模式開啟,有wb、rb、ab組合

f.write(img)

拓展:

f = open('haha.txt','w')

f.write('test')

# 不加下面這個這句,有時會在檔案中看不到寫入的資料,是因為有緩衝區,它會等緩衝區資料儲存到一定的值才會寫入到磁碟

f.flush() #立即把緩衝區的內容寫到磁碟裡面。

time.sleep(50)

with open('b.txt') as f,open('c.txt') as fc:#自動關檔案指標;乙個with可以開啟多個檔案,逗號隔開即可。

f.write('aaa')

2.  修改檔案的2種方式:

# 粗暴直接,適用於小檔案,內容少

with open('geci','a+',encoding='utf-8') as f:

f.seek(0)

all = f.read()

new_all = all.replace('二','一')

f.seek(0)

f.truncate()

f.write(new_all)

f.flush()

# 替換乙個檔案中的內容,直接修改檔案不好實現,一般把修改後的檔案內容儲存到bak檔案,刪除原來檔案,rename bak檔案。

# .**檔案是隱藏檔案

with open('geci.txt', 'r+', encoding='utf-8') as f, open('.geci.bak', 'w', encoding='utf-8') as ff:

for i in f:

newline = i.replace('一', '二')

ff.write(newline)

os.remove('geci.txt')

os.rename('.geci.bak', 'geic.txt')

3.  函式

# 函式:就是把一堆**組合到一起,變成乙個整體

# 提高**的復用性

# def hello(filename,content): 這種是位置引數,必填引數

# def hello(filename,content='ceshi'): # 預設值引數,非必填

def hello(filename,content=''): #形參

with open(filename,'a+',encoding='utf-8') as f:

if content:

f.write(content)

else:

f.seek(0)

res = f.read()

return res

print(hello('demo.txt')) #實參

# return 立即結束函式

print(hello('demo.txt','1243')) #函式沒有寫return的話,返回值是none,返回值不是必須寫的,需要獲取函式返回值再寫

a = 100

可變引數

# 可變引數,*args

def test(a,b=1,*args):

# print("a",a)

# print("b", b, type(b))

print('args',args)

test("haha")

# 如果後面有多餘的引數,會把它儲存到args元組中

test("haha",'22','1','2')

關鍵字引數

# 關鍵字引數

def test2(a, **kwargs):

print('a:',a)

print(kwargs)

test2(a=1,name='test') #

練習題

print('-1'.isdigit())  # 判斷乙個字串是否是純數字

# 1.寫乙個校驗字串是否為合法的小數

# 0.88

# -0.99

def check_float(num):

str_num = str(num)

print("str_num:",str_num)

if str_num.count('.') == 1:

left = str_num.split('.')[0]

right = str_num.split('.')[1]

print("left %s;right %s" % (left,right))

if left.isdigit() and right.isdigit(): # 正小數

return true

elif left.startswith('-') and left.count('-') == 1:

if left.split('-')[-1].isdigit() and right.isdigit():

return true

return false

print(check_float('-1.-1')) # 這裡如果直接傳float型數字,傳參過程中會自動給把數字給你轉型。

4.  模組

# 乙個python檔案就是乙個模組

# 1.標準模組

# python自帶的,不需要安裝

# 2.第三方模組

# 手動安裝

# 解壓

# 在命令列裡面進入到這個解壓之後的目錄(windows下如何快速進入cmd命令視窗:按住shift+右鍵:在此處開啟命令視窗)

# 執行python setup.py install

## 3.自己寫的python檔案

# import xx 匯入乙個檔案的實質:把這個python檔案執行一次

# import hahaha

# import 匯入檔案時,首先從當前目錄下找這個檔案

# 然後從python的環境變數中尋找

# 環境變數是讓在任何目錄下都能使用這個命令

import sys

print(sys.path) # 檢視系統的環境變數,在pycharm下執行這句,會把工程根目錄也列印出來,這是pycharm自動加上的。

5.  遞迴

# 遞迴:自己呼叫自己

count = 0

def test1():

global count

count += 1

# num = 8

# num = int(input('please enter a number:'))

# if num%2==0:# 判斷輸入的數字是不是偶數

# return true # 如果是偶數的話,程式就退出了,返回true

print('不是偶數請重新輸入!')

return test1() # 如果不是偶數的話繼續呼叫自己,輸入值

print(test1()) # 呼叫test

# 用遞迴能實現的用迴圈都能實現,但最好不用遞迴,效率較低。

# 遞迴最多遞迴999次

6.  集合

# 集合,天生去重

# 集合的作用:

# 1、它可以把乙個列表中重複的資料去掉,而不需要你再寫判斷

# 2、可以做關係測試,比如說有兩個班,乙個效能測試班,乙個是介面測試班的,想找出來既學習了效能又學習了介面測試的同學,就可以用集合

li = [2, 3, 1, 2, 3, 4]

s_list = set(li) # 這樣就定義了乙個集合

set1 = set([1, 3, 4, 5, 6]) # 這種方式和上面的都是把list轉換成乙個集合

set2 = # 直接定義乙個集合

s = set()

s2 =

# 集合是無序的,沒有辦法通過下標取值

s2.add('5')

s2.add('1')

s3 =

print(s2.intersection(s3)) # 取交集,生成了1個新的集合,不會修改原來的集合

print(s2)

print(s3)

# print(s3 & s2) # 取交集

## print(s3.union(s2)) # 取並集

# print(s3 | s2) # 取並集

## print(s2.difference(s3)) # 在s2中存在,在s3中不存在

# print(s2 - s3) # 取差集

函式模組 F4 DATE

函式模組 f4 date 用這個函式可以獲得日期型別欄位的 f4 幫助。輸入引數 date for first month 初始選中日期 display 是否返回選中日期,如果為 x 則不返回值 factory calendar id 指定乙個工廠日曆 gregorian calendar flag...

函式模組 F4 DATE

用這個函式可以獲得日期型別欄位的 f4 幫助。輸入引數 date for first month 初始選中日期 display 是否返回選中日期,如果為 x 則不返回值 factory calendar id 指定乙個工廠日曆 gregorian calendar flag 使用格里高利歷,不使用工...

第57課 深入理解函式模板

本文內容來自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 函式模板 編譯器從函式模板通過具體型別 產生不同的函式 編譯器會 對函式模板進行兩次編譯 注意事項 函式模板本身不允許隱式型別轉換 實驗 include include using namespace std class test ...