python學習筆記之函式
python學習筆記之函式
昨日內容回顧
函式的定義與呼叫
函式必須先定義後呼叫
呼叫函式時,函式名後面必須帶上括號
函式的分類
內建函式:python直譯器提前定義好的
自定義函式:
- 無參函式 括號內沒有引數
- 有參函式 括號內有引數
- 空函式 函式體程式碼用pass佔位
函式的返回值
獲取函式的返回值需要用一個變數名接收
return後面是什麼,就會返回什麼。
return會結束掉函式的執行
函式的引數
形式引數
函式定義階段括號內寫入的引數
實際引數
函式呼叫階段,對傳入的資料,值
位置引數
位置形參
定義階段從左往右依次填寫的變數名
位置實參
呼叫階段從左往右依次填寫的資料,值
關鍵字實參
選擇形參對齊進行繫結的資料,值
預設形參
函式定義階段,賦予形參的值,當沒有實參傳入形參時,形參機會使用預設值。
可變長引數
在函式形參中,用於接收多餘的位置引數,多餘的引數會被組織成一個元組
**
形參中,用於接收多餘的 a = 1 形式實參,會自動轉換為字典。
*在實參中。會對值進行類似for迴圈,組織成一個元組
**在實參中。會將字典打散成v值。
今日內容概要
名稱空間
存放變數與變數值的繫結關係的地方
內建名稱空間
python直譯器提前定義好的變數,函式
print,input,len等
全域性名稱空間
在單個py檔案中,編寫的變數名或函式名會存到全域性名稱空間中
a = 1
b = 'eason'
區域性名稱空間
函式體程式碼執行產生的變數名或者函式名都是區域性空間。
def eason():
a = 1 # a就是區域性名稱空間
存活週期
-
記憶體名稱
python直譯器執行則產生
python直譯器關閉則銷燬
-
全域性名稱空間
py檔案執行則產生
py檔案結束則銷燬
-
區域性名稱空間
函式體程式碼開始執行則產生
函式體程式碼結束執行則銷燬
名字的查詢順序
在區域性名稱空間中
- 區域性名稱空間
- 全域性名稱空間
- 內建名稱空間
在全域性名稱空間中
- 全域性名稱空間
- 內建名稱空間
哪怕三個空間都有相同的函式名,也是按照這個順序查詢
如果函式沒有被呼叫,那麼不管函式體有多麼複雜,函式體是什麼也不用太先去在意!
區域性名稱之間如果不是巢狀關係,那麼就互不干涉!
作用域
作用域就是名稱空間能夠作用的範圍
內建空間:全域性可使用
全域性名稱空間:全域性可使用
區域性名稱空間:區域性可用
global與nonlacal關鍵字
global:區域性修改全域性不可變型別
a = 1
def 變數名():
global a
a = 2
呼叫一次該函式,a的值在全域性將為2
nonlocal:區域性修改區域性
def f1():
a = 1
def f2():
nonlocal a
a = 2
f2()
print(a)
f1()
改變上一層巢狀的值
函式名的多種用法
-
函式名可用直接當變數名賦值
-
函式名也可以作為函式的實參
-
函式名也可以作為函式的返回值
-
函式名可以作為容器的元素
可儲存多個元素的資料型別
函式的巢狀
函式的巢狀呼叫
def gain():
name = input('name')
password = input('password')
return name, password
def log_in():
name, password = gain()
if name == 'eason' and password == '123':
print('登入成功')
log_in()
呼叫一個函式,函式內部可以再呼叫多個函式的叫做巢狀。
呼叫一個函式,函式呼叫自己的叫做遞迴。
函式呼叫函式,叫做函式做為實參。
今日小結
明天學裝飾器。