Day10檔案內指標移動和函式
強調:只有t模式下的read(n),n代表字元個數,除此以外都是以位元組為單位 ,例如f.read(4)讀出4個字元
控制檔案內指標的移動:f.seek()以位元組為單位
f.tell()檔案開頭為準,當前指標所在位置
f.seek(移動的位元組數,三種模式):
0(預設的模式);參照檔案開頭,
1:參照指標當前所在的位置
2:參照檔案末尾
ps:只有0模式可以在b,t模式下使用;1,2模式只可以在b模式下使用
f.truncate(self,size)從檔案開頭數截斷,後面的刪除
a模式開啟
f.truncate(3) 3個位元組
函式分類:1.內建函式 2.自定義函式
函式的基本使用
什麼是函式:
在程式具備某一功能的工具 = 函式
事先準備好工具 = 函式的定義
遇到應用場景,拿來就用 = 函式的呼叫
先定義後呼叫
為什麼要用函式:
1.程式碼冗餘
2.程式組織結構不清晰,可讀性差
3.擴充套件性差
如何用函式:
函式的使用必須遵循一個原則:
1.先定義:只檢測語法,不執行程式碼
定義語法
def 函式名(引數1,引數2,引數3):
""" 文件註釋"""
程式碼塊
return 值
申請記憶體空間,函式體程式碼扔進記憶體空間,繫結給函式名
定義函式的三種形式:
①無參函式,定義時無參,呼叫不用傳參
②有參函式,定義時有參,呼叫時傳參必須對應
③空函式
2.後呼叫:執行函式體程式碼
函式名() :①函式名找到記憶體地址②加()執行記憶體地址內程式碼
呼叫函式的三種形式:①語句形式:函式名()②表示式形式:res = max2(1000,200)*12 ③可以當做另外一個函式的引數
函式的返回值:
1.函式的返回值:函式體程式碼的執行成果
2.函式為什麼要有返回值:執行一段功能需要拿到函式的處理結果做進一步的處理
3.如何用返回值:
return 返回值的特點: 1.返回的值沒有型別和個數限制
2.return多個值用逗號分隔開,以元組儲存
3.return或者沒有return,預設返回none
4.return一個值,返回的就是該值本身
5.return是函式結束執行的標誌,函式裡可以有個return但是隻執行一次return
函式的引數分為兩大類:
①形參:在定義函式括號內指定的引數(變數名),稱之為形參
②實參:在呼叫函式時括號內傳入的值(變數值),稱之為實參
在呼叫函式時,實參值(變數值)會傳給形參(變數名),這種繫結關係在呼叫函式時生效,呼叫結束,繫結關係解除
函式引數詳解:
1.形參:
1.1位置形參:在定義階段,按照從左到右的順序依次定義的形參
特點:必須被傳值
1.2預設引數:在定義階段,就已經為某個形參賦值,該形參稱之為預設形參
特點:在定義階段就已經有值,意味著呼叫階段,可以不用為其傳值
注意點:位置形參必須放在預設引數前面
1.3可變長引數:*,**的用法
*args把溢位的位置實參以元組的方式存起來,賦值給*後的變數名args
**kwargs把溢位的關鍵字實參以字典的方式存起來,賦值給**後的變數名kwargs
2.1 位置實參:在呼叫階段,按照從左到右依次存入的值
特點:這種傳值方式,會與形參一一對應
2.2 關鍵字實參:在呼叫階段,按照key=value的格式傳值
特點:可以完全打亂位置,但仍然能為指定的形參傳值
注意 : 1.同一個形參只能被賦值一次
2.位置實參必須被關鍵字實參的前面
2.3 實參中*與**的使用
1.實參中帶*:先將實參打散成位置實參,然後再與形參做對應(後的引數要可迭代)
2.實參中帶**:先將實參打散成關鍵字實參,然後再與形參做對應(**後只能跟字典)
外部以什麼形式給函式wrapper傳參,index接收的實參以相同的形式傳入
def index(x,y,z):
print(x,y,z)
def wrapper(*args,**kwargs):
index(args,**kwargs)