函式與Lambda表示式

2021-10-25 15:20:27 字數 4826 閱讀 1113

# 學習人員:賈其豪

#函式定義預設值引數

#函式定義時,給形參設定預設值,只有與預設值不符的時候才需要傳遞實參

deffun

(a,b=10)

:#b稱為預設值引數

print

(a,b)

#函式的呼叫

fun(

100)

fun(20,

30)'''個數可變的位置引數

定義函式時,可能無法事先確定傳遞的位置實參的個數時,使用可變的未知引數

使用*定義個數可變的位置形參

結果為乙個元組

個數可變的關鍵字形參

定義函式時,無法事先確定傳遞的關鍵字實參的個數時,使用可變的關鍵字形參

使用**定義個數可變的關鍵字形參

結果為乙個字典

'''#個數可變的位置引數,只能定義乙個

deffun

(*args)

:print

(args)

fun(10)

fun(12,

23,34,

45,)#個數可變的關鍵字形參,只能定義乙個

deffun1

(**args)

:print

(args)

fun1(a=12)

fun1(b=

23,c=

34,d=45)

'''在乙個函式的定義過程中,既有個數可變的關鍵字形參,又有個數可變的位置形參,

要求,個數可變的位置形參放在個數可變的關鍵字形參前面'''

deffun2

(*args1,

**args2)

:pass

'''def fun3(**args1,*args2): #報錯

pass'''

# 學習人員:賈其豪

'''位置實參:根據形參對應的位置進行實參傳遞

關鍵字實參:根據形參名稱進行實參傳遞'''

defcalc

(a,b)

:#a,b稱為形式引數,簡稱形參,形參的位置是在函式的定義處

c=a+b

return c

#位置實參

result=calc(10,

20)#10,20稱為實際引數,簡稱實參,實參的位置是在函式的呼叫處

print

(result)

#關鍵字實參

result=calc(b=

10,a=20)

#=左側的變數名稱叫做關鍵字

print

(result)

# 學習人員:賈其豪

deffun

(a,b,c)

:print

('a='

,a)print

('b='

,b)print

('c='

,c)#函式的呼叫

fun(10,

20,30)

lst=[11

,22,33

]#fun(lst) #報錯

fun(

*lst)

#在函式呼叫時,將列表中的每個元素都轉化為位置實參傳入

fun(a=

100,b=

200,c=

300)

dic=

#fun(dic) #報錯

fun(

**dic)

#在函式呼叫時,將字典中的鍵值對轉換為關鍵字實參傳入

deffun1

(a,b,

*,c,d)

:#在*之後只能用關鍵字傳參

print

('a='

, a)

print

('b='

, b)

print

('c='

, c)

print

('d='

, d)

fun1(12,

23,d=

22,c=21)

#函式定義是的形參的順序問題

deffun2

(a,b,

*,c,d,

**args)

:pass

deffun3

(*args,

**args2)

:pass

deffun4

(a,b=10,

*args1,

**args2)

:pass

# 學習人員:賈其豪

'''函式就是執行特定功能的一段**

優點:復用**

隱藏實現細節

提高可維護性

提高可讀性便於除錯'''

'''函式的建立:def 函式名([輸入引數])

函式體[return ***]'''

defcalc

(a,b)

: c=a+b

return c

result=calc(10,

20)print

(result)

# 學習人員:賈其豪

deffun

(arg1,arg2)

:print

('arg1'

,arg1)

print

('arg2'

,arg2)

arg1=

10010

)print

('arg1'

, arg1)

print

('arg2'

, arg2)

n1=11

n2=[22,

33,44]

print

('n1'

,n1)

print

('n2'

,n2)

fun(n1,n2)

print

('n1'

,n1)

print

('n2'

,n2)

#在函式呼叫過程中,進行引數的傳遞

#如果是不可變物件,在函式體的修改不會影響實參的值

#如果是可變物件,在函式體的修改會影響到實參的值

# 學習人員:賈其豪

'''變數的作用域

程式**能訪問該變數的區域

根據變數的有效範圍可分為:

區域性變數:在函式內定義並使用的變數,只在函式內部有效,區域性變數使用global宣告,這個變數就會變成全域性變數

全域性變數:函式體外定義的變數,可作用於函式內外

'''def

fun(a,b)

: c=a+b #a,b,c都相當於是區域性變數

print

(c)#print(c) #a,c超出了起作用的範圍(作用域)

#print(a)

name=

'楊老師'

#name的作用範圍在函式內外都可以起作用,是全域性變數

print

(name)

deffun2()

:print

(name)

fun2(

)def

fun3()

:global age #age的作用範圍是全域性

age=

20print

(age)

fun3(

)print

(age)

# 學習人員:賈其豪

deffun

(num)

: odd=

even=

for i in num:

if i%2:

else

:return odd,even

#函式的呼叫

lst=[10

,29,34

,23,44

,53,55

]print

(fun(lst)

)#輸出多個值會以元組型別輸出

'''函式的返回值

1.如果函式沒有返回值(函式執行完畢後,不需要給呼叫處提供資料),return可以省略不寫

2.函式的返回值,如果是1個,直接返回型別

3.函式的返回值,如果是多個,返回的結果是元組

'''

# 學習人員:賈其豪

'''什麼是遞迴函式:如果在乙個函式的函式體內呼叫了該函式本身,這個函式就稱為遞迴函式

遞迴的組成部分:遞迴呼叫與遞迴終止條件

遞迴的呼叫過程:每遞迴呼叫一次函式,都會在棧記憶體分配乙個棧幀

每執行完一次函式,都會釋放相應的空間

遞迴的優缺點:缺點:占用記憶體多,效率低下

優點:思路和**簡單

'''#使用遞迴計算階乘

deffac

(n):

if n==1:

return

1else

: res=n*fac(n-1)

return res

print

(fac(6)

)#斐波那契數列

deffib

(n):

if n==

1or n==2:

return

1else

: res=fib(n-1)

+fib(n-2)

return res

print

(fib(6)

)#輸出前六位上的數字

for i in

range(1

,7):

print

(fib(i)

)

函式與lambda表示式

lambda表示式是python中一類特殊的定義函式的形式,使用它可以定義乙個匿名函式。與其它語言不同,python的lambda表示式的函式體只能有單獨的一條語句,也就是返回值表示式語句。其語法如下 lambda 形參列表 函式返回值表示式語句 常規函式 def comp x return x a...

函式與Lambda表示式

def myfirstfunction name 函式定義過程中name是形參 因為ta只是乙個形式,表示佔據乙個引數位置 print 傳遞進來的叫做實參,因為ta是具體的引數值!format name myfirstfunction 老馬的程式人生 傳遞進來的老馬的程式人生叫做實參,因為ta是具體...

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...