函式也是⼀個物件,函式⽤來儲存⼀些可執⾏的**,並且可以在需要時,對這些語句進⾏多次調⽤。
在python中,函式有五大要點,分別是def、函式名、函式體、引數、返回值,以及兩個英文版符號,分別是括號和冒號。
#函式語法
def 函式名(
[形參1
,形參2
,形參3..
..])
:#**塊
定義函式時可以在函式括號裡定義逗號隔開的數量不等的形參
形參(形式引數) 定義形參就相當於在函式內部宣告了變數,但是並不是賦值。
實參(實際引數)指定了形參,那麼在調⽤函式時必須傳遞實參,實參將會賦值給對應的形參,簡單來說有⼏個形參就要有⼏個實參。
def
fun(a,b,c=8)
:print
(f'a=,b=,c='
)#如果⽤戶傳遞了引數則預設值不會⽣效。
fun(1,
6,9)
#a=1,b=6,c=9
#如果⽤戶沒有傳遞,則預設值就會⽣效。
fun(1,
6)#a=1,b=6,c=8
def
fun1
(a=2
,b=3
,c=6):
print
(f'a=,b=,c='
)fun1(c=
1,b=6)
#a=2,b=6,c=1
fun1(a=
2,b=
6,c=9)
#a=2,b=6,c=9
fun1(b=
8,a=6)
#a=6,b=8,c=6
def
fun2
(a=2
,b=3
,c=6):
print
(f'a=,b=,c='
)fun2(
6,c=9)
#a=6,b=3,c=9
#fun2(b=8,6) #syntaxerror: positional argument follows keyword argument
#fun2(b=8,c=6,2) #syntaxerror: positional argument follows keyword argument
fun2(
6,c=
9,b=80)
#a=6,b=80,c=9
def
sum_fun
(a,b)
:print
(a+b)
#定義乙個函式求任意幾個數的和
defanydatasumfun
(*a)
:print
('a='
,a,type
(a))
#函式的裝包
# sum_fun(2,6)
anydatasumfun(
)# a= ()
anydatasumfun(1,
2,3,
4,5,
6,7,
8,9,
10)#a= (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
defmysum
(*a)
:print
(a)return
sum(a)
print
(mysum(1,
2,3,
4,5,
6,7,
8,9,
10))# (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# 55
函式引數星不可亂加,如下會出現報錯
#函式兩個以上的單星,會報錯
# def mysum1(a,*b,*c): #syntaxerror: invalid syntax
# print(a)
# print(b)
# print(c)
# def mysum11(*a,b,*c): #syntaxerror: invalid syntax
# print(a)
# print(b)
# print(c)
#
如果星號在中間或者在最前面,函式定義合法,但呼叫傳參需注意要有效的結合指定引數傳參,否則會報錯。
#星在中間的情況,傳參注意
defmysum2
(a,*b,c)
:print
(a)print
(b)print
(c)#錯誤的傳參示範:報錯def mysum1(a,*b,*c): #syntaxerror: invalid syntax
#mysum2(1,2,3,4,5,6,7,8) #typeerror: mysum2() missing 1 required keyword-only argument: 'c'
mysum2(1,
2,3,
4,5,
6,7,
8,9,c=10)
#正確呼叫示範結果:
# 1# (2, 3, 4, 5, 6, 7, 8, 9)
# 10
#星在最開始的情況
defmysum3
(*a,b,c)
:print
(a)print
(b)print
(c)#mysum3(1,2,3,4,5,6,7,8,9,c=10) #typeerror: mysum3() missing 1 required keyword-only argument: 'b'
mysum3(1,
2,3,
4,5,
6,7,
8,b=
9,c=10)
#正確的傳參的輸出結果:
# (1, 2, 3, 4, 5, 6, 7, 8)
# 9# 10
函式引數為**的形參可以接受其他關鍵引數,它會將這些引數統一儲存到字典當中,字典的key就是引數的名字,字典的value就是引數的值,而且這個也只能有且只有乙個,並且必須寫在所有的引數後面,
不能寫中間也不能寫開頭。
def
mysum5
(**a)
:print
(a)#mysum5(3,4) #typeerror: mysum5() takes 0 positional arguments but 2 were given
mysum5(h=
3,d=4)
#mysum5(c=
3,b=
4,a=10)
#
def
mysum6
(b,c,
**a)
:print
(b)print
(c)print
(a)mysum6(c=
3,b=
4,a=
10,h=
89,w=28)
# 4# 3
#
結論:
*a處理的是位置引數
**a處理的是關鍵字引數
def
fun(a,b,c)
:print
('a='
,a,end=
' ')
print
('b='
,b,end=
' ')
print
('c='
,c)t =
(100,20
,30)#fun(t) typeerror: fun() missing 2 required positional arguments: 'b' and 'c'
fun(t[0]
,t[1
],t[2]
)#a= 100 b= 20 c= 30
#問題:如果元組有多個元素,則上面的方法就顯得臃腫
#用函式呼叫傳實參時,採用有序型別前面加*,這樣他就會自動的序列的元素,逐一的解析賦值給函式對應的形參
#元組作為實參函式解包的情況
a =(50,
60,70)
fun(
*a)#a= 50 b= 60 c= 70
#列表作為實參函式解包的情況
list_a =[1
,2,3
]fun(
*list_a)
#a= 1 b= 2 c= 3
#但是要注意,序列實參和形參個數應該盡量保持一致,否則在不加組包(形參加星號的方式)就會報錯
#list_b = [2,4,7,8]
#fun(*list_b)#typeerror: fun() takes 3 positional arguments but 4 were given
# 字典作為實參前面加**函式做自動解包
dict_c =
fun(
**dict_c)
#a= 5900 b= 2890 c= 1200
總結:
1.函式組包是函式定義的形參加*號。
2.函式的解包函式掉用傳參時,有序實參,前面加*號
小結:
1.函式也是乙個物件
2.形參和實參:形參和實參的數量要匹配;
3.函式的傳遞方式: 位置傳參和關鍵字傳參;
4.不定長引數: *只能接收位置傳參,**只能接收關鍵字傳參;
5.引數的解包:必須遵守的原則是 序列中的元素的個數必須和形參保持一致。
python知識集錦
程式執行方式 互動式 也稱為解釋語言或指令碼語言 和檔案式 也稱為編譯語言或靜態語言 解釋語言 逐條轉換為目標 編譯語言 整體轉換為目標 程式語言 對計算機能夠理解和識別使用者操作的一種互動體系,按照特定規則組織計算機指令,使計算機自動進行運算處理。電腦程式 按照程式語言規則組織起來的一組計算機指令...
Python優秀函式庫集錦(一)
numpy python的一種開源的數值計算擴充套件。這種工具可用來儲存和處理大型矩陣,比python自身的巢狀列表 nested list structure 結構要高效的多 該結構也可以用來表示矩陣 matrix pandas 它是基於numpy 的一種工具,該工具是為了解決資料分析任務而建立的...
Python 趣味知識點集錦
虛數由實部和虛部兩個部分構成 real imag 虛部字尾為j或j 其中實數部分和虛數部分都為浮點數。例如定義乙個虛數,分別輸出它的實部和虛部 a 4.7 0.666j 定義乙個虛數 print a 輸出這個虛數 print a.real 輸出實部 print a.imag 輸出虛部 print a...