python筆記 3 函式(1)

2022-03-10 04:48:11 字數 4009 閱讀 3839

函式以及函式使用的注意事項(1)

目錄函式的返回值

函式中的函式(子函式):

lambda函式

函式的基本定義方式

在python中定義乙個函式的方式的模板如下:

def fun_name(arg):

return value

其中必須寫的是def相當於英文的definite(定義)的意思,直接可以理解為定義乙個名為fun_name的函式,其中函式的引數是arg,也可以不只是乙個值,可以是多個值,用逗號分割符隔開,返回乙個value

指定引數的位置和引數的初始化方式
在python中假如你定義了乙個函式:

def fun(a,b):

print(a,b)

a=10

b=20

print(fun(a,b))

在上面的函式中分析一下執行過程如下:首先你定義了乙個名稱為fun的函式,這個函式有兩個引數:a,b,但是沒有返回值:所以最底下的print(fun(a,b))執行完成後輸出列印的是none

引數的預設值
依舊是上面的** 我們考慮下面這樣的情況:

def fun(a,b=20):

print(a,b)

a=20

print(fun(a))

觀察和上面的**不同的地方是我們給引數b增加了乙個預設的值,這個預設值可以指定任何的型別就像命名一樣,但是有乙個潛規則:指定預設值的引數必須在不指定預設值的引數的後面,上面的函式輸出是20,20

可以採用只輸入沒有指定預設值的引數就像上面那樣,也可以輸入兩個引數像這樣:

fun(10,12)

#也可以

fun(a=10,b=12)

fun(b=12,a=10)

#用引數的名字指定引數的值

這樣a的值初始化為10,b的預設值20被覆蓋掉變為12進入到函式中

指定位置的引數傳遞方式
在python3.8中新加入了一種指定位置傳引數的方式,通俗的來講,就是傳遞引數的時候只能按照引數的順序進行傳遞,不能按照引數的名字進行傳遞引數也就是說不能使用上面指定的fun(a=10,b=12)的方式進行傳遞引數,只能fun(10,12)的進行傳遞,要想讓函式中的引數是這樣的規則進行呼叫,初始化函式的語法應該如下:

def fun(a,b,/,c): #在'/'符號之前的所有引數都被設定為按位置傳參

#在'/'之後的引數可以使用fun(1,1,12)(c=12),也可以使用fun(1,1,c=12)的方式

print(a,b,c)

指定引數的傳遞方式
在上面呼叫函式的例子中有一種呼叫的格式是fun(a=10,b=12)的方式,這種方式就是指定引數的傳遞,因為用到了引數名字去指定引數的值,在指定引數的傳遞中

你可以不考慮引數的位置因素,例如fun(a=10,b=12)和fun(b=12,a=10)是相同的效果的傳遞和函式呼叫

如何在函式中使用這樣的規則侷限於一部分的引數:

def fun(*,a,b): #在引數之前用符號'*'表示之後的引數都要按照引數傳遞

print(a,b)

fun(a=1,b=3)#正確

fun(b=3,a=1)#正確

fun(1,3)#錯誤

question1:說說為什麼上面的fun(1,3)是錯誤的?

小結:對於乙個函式如下

def fun(a,b,/,c,d,*,e,f):

print(a,b,c,d,e,f)

對於引數a,b而言我們知道引數a,b是按照位置傳遞的引數,而e,f是按照引數進行傳遞的引數,那麼c,d呢?

c,d是既能按照引數傳遞也能按照位置傳遞的引數,也就是說你可以直接fun(1,2,3,4,e=5,f=6)的初始化,也可以

fun(1,2,c=3,d=4,e=5,f=6)的進行初始化,兩種規則都適合使用

函式的返回值
函式的返回值通常來講只有乙個,緊跟在return關鍵字之後:

def fun(a):

return a

#a可以是任何物件(list tuple 字典 字串)以及任何的資料型別

如果函式沒有寫返回值的話,那麼預設的返回值是none

question2 :如何在函式中返回多個值?寫出**檢驗你的想法?

函式中的函式(子函式):
先看下面的**:

def fun():

def subfun1(x):

print(x)

return subfun1

f=fun()

print(f(1))

分析:考慮上面的函式fun()我們定義了乙個subfun1(x)的函式,並且呼叫這個函式之後將subfun1的函式座位返回值返回

然後用f接受這個返回值也就是說此時f=subfun(x)的函式f是這個函式的第二個名字,通過f(1)呼叫這個函式,print(1)進行輸出列印

理論上來講子函式可以定義任意多個,對於變數的作用域的問題:

def fun():

x1=10

def subfun1(x):

x2=12

x1=x1+1#錯誤,不可以使用外部的塊的內容

x2=x2+1#錯誤 不能使用子函式塊的內容

return subfun1

也就是說子函式和外部的函式之間是彼此獨立的不可以互相溝通

lambda函式
lambda函式作為一種簡單的使用的方式,有時候可以當成一種規則的去使用:在有的python的內建函式中可以傳遞lamda函式作為引數

比如:排序 對映 之類的函式(sorted(),map())都可以傳遞乙個lambda函式

lambda函式有時候也叫做匿名函式

定義方式如下:

f=lambda x,y:x*y #呼叫方式為

f(1,2) #x=1 y=2 返回1*2

# lambda arg1,arg2...:函式體

#首先寫乙個lambda 緊接著是引數列表 arg1,arg2.... 在:後跟的是函式體

使用場景

l=[1,1,2,3,4]

print(sorted(l,key=lambda x:abs(3-x)))

按照l中的值和3的距離的大小進行排序,key是乙個僅按照引數傳遞的引數

list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
對列表[1, 2, 3, 4, 5, 6, 7, 8, 9]中的值都進行x*x的操作

Python函式筆記 1

1.函式的定義 乙個被封裝的具有特定功能的 段。關鍵字def 2.函式的特定點 可以重複使用 復用性 保持 的一致性 方便修改。3.函式名 給封裝好的 段 函式 起個別名。4.引數分為兩種 形參和實參。形參 本質上是乙個區域性變數,由於接受函式外部的資料。它是定義函式時定義的 實參 在函式呼叫執行時...

python學習筆記3 迴圈1

1 while break continue 1 while語句 2 3while 判斷條件 4執行語句 5 6 count 0 7while count 9 8print the count is count 9 count count 1 1011 print good bye 1213 con...

Python學習筆記 3 ,函式引數

定義可變引數 defcalc sum args ax 0for n in args ax ax n return ax print calc sum 1,2,3 設定預設引數 defpower x,n 2 s 1while n 0 n n 1 s s x return s print power 2...