函式以及函式使用的注意事項(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...