目錄
- 0 上節課複習
- 0.1 檔案是什麼
- 0.2 操作檔案的步驟
- 0.3 open
- 0.4 指標操作
- 0.5 檔案的複製
- 1 函式基礎
- 1.1 函式的作用
- 1.2 函式的定義形式
- 1.3 函式定義的兩個階段
- 2 定義函式的三種形式
- 2.1 無參函式
- 2.2 有參函式
- 2.3 空函式
- 3 函式的返回值
- 4 函式物件
- 5 函式引數的應用
- 5.1函式定義分為兩個階段
- 5.2 預設形參
- 5.3 關鍵字實參
- 5.4 何時用?
- 6 可變長引數
- 6.1 可變長形參
- 6.2 可變長實參
0 上節課複習
0.1 檔案是什麼
是作業系統提供的虛擬單位,用來儲存資料
0.2 操作檔案的步驟
- 開啟檔案
- 讀寫
- 關閉檔案
0.3 open
- with open(‘檔案路徑‘,開啟方式,編碼格式) as 變數名:
讀寫操作
- r只讀 w清空檔案後只寫,a追加寫入,t文字模式 /b二進位制模式(沒有encoding引數)
0.4 指標操作
seek移動指標,tell告訴你當前指標位置,read(n)讀取n個字元,truncate階段檔案(瞭解)
0.5 檔案的複製
with open('a.txt','r',encoding = 'utf8') as fr,open('a_swap.txt','w',encoding = 'utf8') as fw:
data = fr.read()
data = data.replace('apple','banana')
fw.write(data)
import os
os.remove('a.txt')
os.rename('a_swap.txt','a.txt')
# 換行加個斜槓
with open('a.txt','r',encoding = 'utf8') as fr,\
open('a_swap.txt','w',encoding = 'utf8') as fw:
1 函式基礎
1.1 函式的作用
- 把冗餘的程式碼寫成一個通用模板
- 可以把冗餘的程式碼獨立開來
1.2 函式的定義形式
def 函式名(): # 函式名得有一定的意義(類似於變數名)
操作程式碼
# 引用時
函式名()
例如,註冊功能
def register():
print("註冊".center(100, '*'))
username = input("請輸入你的使用者名稱:\n")
password = input("請輸入你的密碼:\n")
with open(r'users information.txt', 'a', encoding='utf-8') as fa:
fa.write(f'{username}:{password}\n')
# 使用方式:函式名()可以使用這個工具
register()
1.3 函式定義的兩個階段
- 定義函式:在這個過程中,本來會報錯的可能不會報錯,因為這個階段只識別語法,而不執行程式碼
- 呼叫函式:這個過程才執行程式碼題
2 定義函式的三種形式
注意:函式知識一種思想,幹活的具體的實現都是靠if/while/for+變數,函式只是讓你幹活更輕鬆
以比大小為例,介紹三種形式
2.1 無參函式
# 定義
def self_max():
x,y = 10,20
if x > y:
print(x)
else:
print(y)
# 呼叫
self_max()
2.2 有參函式
# 定義
def self_max(x,y):
if x > y:
print(x)
else:
print(y)
# 呼叫
self_max(i,j)
2.3 空函式
def self_max:
pass
為什麼有空函式?
你想造一把鋸子,但你現在造不來,就給他東西留下來會造的時候再造
3 函式的返回值
變數名用來接收變數值
函式名用來接收函式的返回值,返回值預設為none,可以把函式體裡面的輸出值換成return,返回一個值給函式名,任意資料型別均可
def get_list():
return [1,2,3,4]
lis = get_list()
print(lis)
- return可以返回任意型別的資料
- return預設返回none
- 當return返回多個值的時候,會以元組的形式把多個值包在一起
4 函式物件
函式名可以看成變數名
列印函式名可以列印返回值
python中一切皆物件,列表資料型別,str,dict,object
舉個例子比較四個數值的大小
def self_max(x,y):
if x > y:
return x
else:
return y
# 比較四個數大小
a,b,c,d = 10,5,14,6
#甚至可以接用其定義一個新的函式
def self_max_four(a,b,c,d):
max_four = self_max(self_max(self_max(a,b),c),d)
return(max_four)
print(self_max_four(1,4,5,2))
切記:函式體裡面要有return,不能由print
5 函式引數的應用
5.1函式定義分為兩個階段
- 定義階段:定義階段的x和y被稱為形參,形參具有描述意義,類似於變數名,不為具體的資料型別
- 呼叫階段:此階段的a和b稱為實參,實參必須是具體的資料型別
def self_max(x,y): # 位置形參
if x > y:
return x # return有break的作用,一旦執行後面的就不輸出了
print(333)
print(666)
return y
num_1 = self_max(10,20) #位置形參
print(num_1)
print('*'*100)
num_2 = self_max(20,10)
print(num_2)
5.2 預設形參
在函式定義階段,提前賦值給形參,當你實參傳值的時候,實參傳的值會覆蓋預設值
def guess_age(age=18):
inp_age = int(input("age>>>"))
if age == inp_age:
print("bingo")
else:
print("error!")
a = guess_age(20)
b = guess_age()
5.3 關鍵字實參
用在函式呼叫階段,找到與形參的對應關係,並賦值給對應的形參,形參名為什麼則關鍵字實參名也必須為什麼
def self_max(x,y):
print(f'x:{x},y:{y}')
if x > y:
return x
return y
print(self_max(y=10,x=41))
5.4 何時用?
什麼時候用預設形參:值不需要改變,並且經常使用,預設形參必須在位置形參後面
什麼時候用關鍵字實參:當你的引數非常多的時候,使用關鍵字實參,關鍵字實參必須位置實參後面
6 可變長引數
6.1 可變長形參
def self_max(*args,**kwargs):
print(args) # *a接受了所有引數,然後以元組的形式儲存了下來,只接受位置引數,不接受關鍵字實參
print(kwargs) # **b接收了所有的關鍵字實參,然後以字典的形式儲存下來
self_max(1,2,3,4,5,6,7,8,9,x=11,m=47,ff=74)
6.2 可變長實參
def self_max(a,b,c,d,e,f,g,x=1,y=2,z=3):
print(a,b,c,d,e,f,g,x,y,x,z)
args = [1,2,3,4,5,6,7] # 把這個列表內的元素一個一個取出來,然後一個一個傳給這個函式,取出的值會覆蓋預設引數
kwargs = {"x":10,"y":11,"z":12} # 把這個字典內的元素一個一個取出來,然後一個一個傳給這個函式,取出的值會覆蓋預設引數
self_max(*args,**kwargs) # *args,**kwargs,被稱為可變長實參,
約定俗稱的,*後面必須得寫args,**後面必須寫kwargs