Python3 5 函式式程式設計之引數詳解

2021-08-07 17:01:20 字數 4567 閱讀 6500

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雖然看起來...