Python函數

第1章 函數的基礎知識

1.1爲何要用函數?

1.     代碼的組織結構不清晰,可讀性差

2.     代碼冗餘

3.     可擴展性差

1.2函數的使用:

    必須先定義,後調用

定義的語法:def  函數名(參數1,參數2,)

            代碼段

            retrun  返回值

定義函數,就相當於定義了一個變量,會申請內存空間將函數體代碼存起來,然後將內存地址綁定給函數名,函數名=函數內存地址

1.3定義函數的三種形式:定義那種形式取決於函數體內部需不需要從外部傳值

1.    無參函數

2.    有參函數

3.    空函數

1.4函數的返回值

def max(x,y):
    
ifx > y:
        
returnx
    
else:
        
returny

res=max(
10,20)
print(res)

1.     return是函數結束的標誌,函數內可以有多個return,但只要執行一次return,整個函數就立即結束,並且將return後的返回值當作本次執行的結果

2.     沒有return默認返回none

3.     return多個返回值用逗號分隔開,返回一個元祖

第2章 函數參數的使用:

2.1函數參數分爲兩大類:

1.    形參:在函數定義階段括號內定義的參數(變量名),

2.    實參:在函數調用階段括號內傳入的值(變量值)

3.    形參與實參的關係:在調用函數時,實參的值會綁定給形參,這種綁定關係在調用結束後立即解除

def func(x,y,z):
    
print(x)
    
print(y)
    
print(z)
func(
1,2,3)

2.2形參與實參的細分:

2.2.1位置參數

位置形參:指在函數定義階段按照從左到右的順序依次定義的形參

特點:必須被傳值,多一個不行,少一個不行

位置實參:指在函數調用階段從左到右依次傳入的值

特點:與形參一一對應

2.2.2關鍵字實參:

在函數調用階段,按照key=value的形式爲指定形參賦值

特點:可以完全打亂順序,但仍然能爲指定的形參賦值

注意:可以混用位置實參和關鍵字實參,但是不能爲同一個形參重複賦值,並且位置實參必須在關鍵字實參的前面

def func(x,y,z):
    
print(x)
    
print(y)
    
print(z)
func(
z=1,y=2,x=3)

 

2.2.3默認參數:

在函數定義階段,就已經爲形參賦值了

特點:在定義階段就已經有值,可以不用傳值,如果傳值,就以傳的爲準

注意:位置形參必須在默認形參前面

      默認形參的值只在函數定義階段賦值一次,定義之後的任何改動都無法改變形參的值

默認形參的值通常是不可變類型

m=100
def func(x,y,z=m):
    
print(x)
    
print(y)
    
print(z)
m=
200
func(1,2)

2.2.4可變長參數:

指在調用函數時傳入的值,個數不固定

Ø  *的用法:

在形參中出現**會將溢出的位置實參,存成元祖的形式,賦值給緊跟其後的形參

def func(x,y,*z):
    
print(x)
    
print(y)
    
print(z)
func(
1,2,3,4)

在實參中出現*,都會將*後的值,打散成位置實參,然後進行賦值

def func(x,y,z):
    
print(x)
    
print(y)
    
print(z)
func(*{
1,2,3})

Ø  **的用法:

在形參中出現****會將溢出的關鍵字實參,存成字典的形式,賦值給緊跟其後的形參

def func(x,y,**z):
    
print(x)
    
print(y)
    
print(z)
func(
1,y=2,z=3,a=4,b=5)

在實參中出現**,都將**後的值打散成關鍵字實參,然後進行賦值

def func(x,y,z):
    
print(x)
    
print(y)
    
print(z)
func(**{
'x':1,'y':2,'z':3})

Ø  args,**kwargs特殊用法:

def func(*args,**kwargs):
    
print(args)
    
print(kwargs)
func(
1,2,3,x=1,y=2)

傳給外層函數wrapper的參數格式如何原封不動的轉嫁給wrapper內部調用的函數index

def index(a,b,c):
    
print('來自index: ',a,b,c)
def wrapper(*args,**kwargs):
    index(*args
,**kwargs)
wrapper(
1,1,1)

2.2.5命名關鍵字形參:

在定義函數階段,但凡是在***之間的參數稱之爲命名關鍵字形參

特點:在傳值時必須按照key=value的形式傳值

第3章 函數對象

3.1函數對象指的是:

函數的內存地址可以像變量值一樣去使用

3.2函數對象如何使用?

1.     可以被引用

def func():
    
print('hello')
f=func
print(f)
f()

2.     可以當作參數傳給另外一個函數

def func():
    
print('hello')
def bar(x):
    
print(x)
    x()
bar(func)

3.     可以當作函數的返回值

def func():
    
print('hello')
def bar():
    
returnfunc
res=bar()
print(res)

4.     可以當作容器類型的元素

Ø  存到列表中與調用:

def func():
    
print('hello')
x=[func
,]
print(x)
x[
0]()

Ø  存到字典中與調用:

def func():
    
print('hello')
x={
'y':func}
print(x)
x[
'y']()

3.3函數對象的應用:

def login():
    
print('登陸功能')
def register():
    
print('註冊功能')
def pay():
    
print('支付功能')
func_dic={
    
'1':login,
    
'2':register,
    
'3':pay
}
while True:
    
print("""
    0:
退出
    1:
登陸
    2:
註冊
    3:
支付
    """
)
    choice=
input('出入命令:').strip()
    
ifchoice == '0' break
    if 
choicein func_dic:
        func_dic[choice]()
    
else:
        
print('輸入命令有錯誤')

第4章 函數嵌套

4.1函數的嵌套分爲兩類:

1.     函數的嵌套定義:在函數內部又定義了一個函數

2.     函數的嵌套調用:在調用一個函數的內部又調用了其他函數

def max(x,y):
    
ifx > y:
        
returnx
    
else:
        
returny
def max1(a,b,c,d):
    res1=max(a
,b)
    res2=max(res1
,c)
    res3=max(res2
,d)
    
returnres3
print(max1(1,2,3,4))

第5章 名稱空間與作用域

5.1什麼是名稱空間?

存放名字與值的綁定關係的內存空間

5.2名稱空間分爲三種:

5.2.1內置名稱空間:

存放的是python解釋器自帶的名字(lenprint),解釋器啓動時創建,解釋器關閉則銷燬

5.2.2全局名稱空間:

存放的是全局的名字,沒有任何縮進,在頂頭定義的名字,python文件執行時創建,文件執行完畢則銷燬

5.2.3局部名稱空間:

在函數內定義的名字,在函數調用時臨時產生,函數調用完畢則立即銷燬

5.3三個名稱空間總結:

加載順序:

1.     先產生內置名稱空間

2.     再產生全局名稱空間

3.     如果調用函數則會產生臨時局部名稱空間

名字的查找順序:從當前位置向上查找

函數的局部名稱空間彼此隔離,但是全局和內置的名稱空間則是所有函數共享的

5.4作用域

全局作用域:內置+全局名稱空間,全局有效

局部作用域:局部名稱空間,臨時存活,函數內有效

global:聲明以後,表示修改全局變量

x=111
def func():
    
globalx
    x=
222
func()
print(x)

nonlocal:聲明以後修改上一層中的變量

x=111
def func():
    x=
222
    
deff2():
        
nonlocalx
        x=
0
    
f2()
    
print(x)
func()
print(x)

第6章 閉包函數

6.1什麼是閉包函數?

定義在函數內的函數

6.2爲什麼要用閉包函數?

爲了實現裝飾器功能

6.3如何用閉包函數?

def outter(x):
    
definner():
        
print(x)
    
returninner
inner=outter(
1)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章