1. 檔案讀寫:b模式
import requestsurl = ''
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
可變引數
# 可變引數,*argsdef 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 ...