1、函式返回值
(1)return命令執行效果:
結束當前函式執行,後邊再寫別的內容也不會執行。
返回值的接收直接賦值給乙個變數,即:變數接收函式體中return定義返回值結果。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zhengzhengliu
def test1():
print("testing 1")
return 0
x = test1() #函式中返回值0賦值給變數x
print(x)
#執行結果:
#testing 1
#0
(2)return返回值情況討論:
沒有定義return:返回none (返回值數=0:返回none)
return 0 :返回值為0 (返回值數=1:返回定義的具體數值)
返回值的個數、型別不固定,返回很多(字串、列表、字典等):將所有返回值包含在乙個元組中返回 (返回值數》1:返回元組tuple)
def test1():
print("testing 1")
def test2():
print("testing 2")
return 0
def test3():
print("testing 3")
return 1,"liu",["zhang","wu"], #將所有返回值包含在乙個元組中返回
#函式呼叫
x = test1()
y = test2()
z = test3()
#列印返回值
print(x)
print(y)
print(z)
#執行結果:
#testing 1
#testing 2
#testing 3
#none
#0#(1, 'liu', ['zhang', 'wu'], )
(3)為什麼要有返回值?
程式需要函式整個執行的結果,後邊的程式可以根據返回值(執行結果)做出後續具體操作。
2、函式呼叫
呼叫方法:執行test()表示呼叫函式test,()內可以有引數也可以沒有
(1)形參和實參:
形參:形式引數(也叫位置引數),不是實際存在,是虛擬變數。在定義函式和函式體的時候使用形參,目的是:在函式呼叫時接收實參。
實參:實際引數,呼叫函式時傳給函式的引數,可以是常量、變數、表示式、函式,傳給形參。(實參個數、型別應與形參一一對應)
區別:形參是虛擬的,不占用記憶體空間,形參變數只有在被呼叫時才分配記憶體單元;
實參是乙個變數,占用記憶體空間,資料傳送單向,實參傳給形參,不能形參傳給實參。
(2)位置引數和關鍵字:
標準呼叫:實參和形參一一對應
關鍵字呼叫:位置無需固定
注意:關鍵引數是不能寫在位置引數的前面
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zhengzhengliu
#有引數的函式
def test(x,y): #x,y是形參
print(x)
print(y)
#標準呼叫
test(1,2) #1,2是實參,函式呼叫時將實參傳遞給形參
#關鍵字呼叫
test(y=2,x=1) #與形參順序無關,位置無需固定
#test(x=3,4) #報錯
test(3,y=4) #可以執行,即:關鍵引數是不能寫在位置引數的前面、
#執行結果:
#1#2
#1#2
#3#4
(3)預設引數:
定義形參時,提前給形參賦值,呼叫時不重新賦值則使用預設賦值的引數。
特點:呼叫函式時,預設引數可有可無,非必須傳遞引數。
用途:預設安裝值、預設資料庫埠號(一些值提前固定)
(4)引數組:當實參數目不固定時,解決如何定義形參的問題。
定義:*形參變數名,規範寫法:*args;這裡的變數名可接收多個實參,將這些實參放到乙個元組裡面。
注:*args功能:接受多個位置引數,轉化後元組的形式。
#當實參數目不固定時,利用引數組
def test(*args): #引數組定義:*形參變數名
print(args)
#函式呼叫,實參放到乙個元組裡面
test(1,2,3,4,5)
test(*[9,7,6,8,3]) #args = tuple([9,7,6,8,3])
def test1(x,*args):
print(x)
print(args)
test1(2,4,6,8,3,5,7) #實參2傳給形參x,剩餘部分傳給args
#執行結果:
#(1, 2, 3, 4, 5)
#(9, 7, 6, 8, 3)
#2#(4, 6, 8, 3, 5, 7)
定義的形參用來接收字典資料型別,規範寫法:**kwargs,即:把多個關鍵字引數轉換成字典方式。
注:**
kwargs接收多個關鍵字引數,轉換成字典的方式、
#函式呼叫,實參放到乙個字典裡面
#**kwargs把多個關鍵字引數轉換成字典方式
def test2(**kwargs): #定義的形參kwargs用來接收字典
print(kwargs)
print(kwargs["name"])
print(kwargs["age"])
print(kwargs["***"])
test2(name = "liu",age = 10,*** = "f")
test2(**)
#執行結果:
##liu
#10#f
##xu
#20#f
引數組與位置引數結合
#引數組**kwargs與位置引數結合
def test3(name,**kwargs):
print(name)
print(kwargs)
test3("liu")
test3("liu",age=18,***="f")
#執行結果:
#liu
#{}#liu
#
引數組與位置引數、預設引數結合
#引數組**kwargs與預設引數結合
def test4(name,age=18,**kwargs): #預設引數必須在引數組前面
print(name)
print(age)
print(kwargs)
test4("liu",***='f',hooby="music")
test4("wu",***='m',hooby="art",age=23) #以關鍵字方式給預設引數賦值
test4("wang",21,***='f',hooby="games") #以位置引數方式給預設引數賦值
#執行結果:
#liu
#18#
#wu#23
##wang
#21#
def test5(name,age=18,*args,**kwargs): #預設引數必須在引數組前面
print(name)
print(age)
print(args)
print(kwargs)
test5("wu",***='m',hooby="art",age=34) #以關鍵字方式給預設引數賦值
test5("wu",2,3,4,5,***='m',hooby="art") #以位置引數方式給預設引數賦值
#執行結果
#wu#34
#()#
#wu#2
#(3, 4, 5)
#
3、高階函式
變數可以指向引數,函式的引數能接收變數,那麼乙個函式就可以接收另外乙個函式作為引數,這種函式稱之為高階函式。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zhengzhengliu
def add(a,b,f):
return f(a)+f(b)
res = add(3,-8,abs) #abs求絕對值函式
print(res)
#執行結果:
#11
注:abs函式作為引數傳遞給add函式,即:乙個函式作為另乙個函式的引數,稱為高階函式。 Python3 5 函式與函式式程式設計
1 關於函式 函式是指將一組語句的集合通過乙個名字 函式名 封裝起來,要想執行這個函式,只需呼叫其函式名即可。1 函式程式設計方法有3種,它是一種程式設計的規範,分別有面向過程 物件導向和函式式程式設計。2 3種程式設計方法各自特點 面向過程 過程 關鍵字 def 物件導向 類 關鍵字 class ...
python3 5 函式與函式式程式設計
1 物件導向,類 class 2 面向過程,過程 def 3 函式式程式設計,函式 def def func1 print in the func1 return 0 傳遞不定量的引數時,形參使用 的形式,引數會作為乙個元組進入 def test a 元組,接受n個位置引數,轉換成元組的形式 pri...
Python函式式程式設計之lambda
python可以使用lambda來建立匿名函式。lambda只是乙個表示式,函式題比def簡單的多。lambda主體是乙個表示式,而不是乙個 塊。僅僅能在lambda表示式中封裝有限的邏輯進去。lambda擁有自己的命名空間,且不能訪問自有引數列表之外或全域性命名空間裡的引數。lambda雖然看起來...