1、預設引數
把第二個引數n的預設值設定為2,n就是預設引數:
def
power
(x, n=2)
: s =
1while
(n >0)
: s = s * x
n = n -
1return s
print
(power(3,
3))print
(power(5)
)#預設n = 2
輸出結果:
2725
設定預設引數時,需要注意:
一是必選引數在前,預設引數在後,否則python的直譯器會報錯;
二是如何設定預設引數。當函式有多個引數時,把變化大的引數放前面,變化小的引數放後面。變化小的引數就可以作為預設引數。
有多個預設引數時,呼叫的時候,既可以按順序提供預設引數,也可以不按順序提供部分預設引數。當不按順序提供部分預設引數時,需要把引數名寫上。比如呼叫enroll('adam', 'm', city='tianjin')
,意思是,city
引數用傳進去的值,其他預設引數繼續使用預設值。
定義預設引數要牢記一點:預設引數必須指向不變物件!
2、可變引數
在python函式中,可以定義可變引數,可變引數就是傳入的引數個數是可變的,可以是1個、2個到任意個,還可以是0個。
定義可變引數和定義乙個list或tuple引數相比,僅僅在引數前面加了乙個*
號。
在函式內部,可變引數接收到的是乙個tuple。
#功能:給定一組數字a,b,c……,請計算a2 + b2 + c2 + ……。
defcalc1
(numbers)
:sum=0
for n in numbers:
sum=
sum+ n * n
return
sum# 呼叫calc1時,需要先組裝出乙個list或tuple
print
('入參為list:'
,calc1([1
,2,3
]))#list [1, 2, 3]
print
('入參為tuple:'
,calc1((1
,3,5
,7))
)# tuple (1, 3, 5, 7)
#定義可變引數:定義可變引數和定義乙個list或tuple引數相比,僅僅在引數前面加了乙個*號
#在函式內部,引數numbers接收到的是乙個tuple
defcalc
(*numbers)
:sum=0
for n in numbers:
sum=
sum+ n * n
return
sumprint
('呼叫可變引數:'
,calc(1,
2,3)
)#已經有乙個list或者tuple,要呼叫乙個可變引數
nums =[1
,2,3
]print
('取list中的值呼叫:'
,calc(nums[0]
, nums[1]
, nums[2]
))#簡化寫法:在list或tuple前面加乙個*號,把list或tuple的元素變成可變引數傳進去
#*nums表示把nums這個list的所有元素作為可變引數傳進去
print
('加*呼叫:'
,calc(
*nums)
)輸出結果:
入參為list:14
入參為tuple:84
呼叫可變引數: 14
取list中的值呼叫: 14
加*呼叫: 14
3、關鍵字引數
關鍵字引數允許你傳入0個或任意個含引數名的引數,關鍵字引數在函式內部自動組裝為乙個dict。
它可以擴充套件函式的功能。
# 關鍵字引數
defperson
(name, age,
**kw)
:print
('name:'
, name,
'age:'
, age,
'other:'
, kw)
person(
'michael',30
)person(
'bob',35
, city=
'beijing'
)person(
'adam',45
, gender=
'm', job=
'engineer'
)#1.0 先組裝出乙個dict,然後,把該dict轉換為關鍵字引數傳進去
extra =
person(
'jack',24
, city=extra[
'city'
], job=extra[
'job'])
# 對1.0的簡化寫法
person(
'jack',24
,**extra)
輸出結果:
name: michael age:
30 other:
name: bob age:
35 other:
name: adam age:
45 other:
name: jack age:
24 other:
name: jack age:
24 other:
**extra
表示把extra
這個dict的所有key-value用關鍵字引數傳入到函式的**kw
引數,kw
將獲得乙個dict,注意kw
獲得的dict是extra
的乙份拷貝,對kw
的改動不會影響到函式外的extra
。
4、命名關鍵字引數
命名關鍵字引數需要乙個特殊分隔符*,*後面的引數被視為命名關鍵字引數
命名關鍵字引數必須傳入引數名,這和位置引數不同。如果沒有傳入引數名,呼叫將報錯
如果函式定義中已經有了乙個可變引數,後面跟著的命名關鍵字引數就不再需要乙個特殊分隔符*了
命名關鍵字引數可以有預設值
#命名關鍵字引數需要乙個特殊分隔符*,*後面的引數被視為命名關鍵字引數
defperson
(name, age,
*, city, job)
:print
(name, age, city, job)
#命名關鍵字引數必須傳入引數名,這和位置引數不同。如果沒有傳入引數名,呼叫將報錯
print
(person(
'jack',24
, city=
'beijing'
, job=
'engineer'))
#如果函式定義中已經有了乙個可變引數,後面跟著的命名關鍵字引數就不再需要乙個特殊分隔符*了
defperson
(name, age,
*args, city, job)
:print
(name, age, args, city, job)
#命名關鍵字引數可以有預設值,從而簡化呼叫:
defperson
(name, age,
*, city=
'beijing'
, job)
:print
(name, age, city, job)
#由於命名關鍵字引數city具有預設值,呼叫時,可不傳入city引數
print
(person(
'jack',24
, job=
'engineer'
))
5、引數組合
在python中定義函式,可以用必選引數、預設引數、可變引數、關鍵字引數和命名關鍵字引數,這5種引數都可以組合使用。但是請注意:
引數定義的順序必須是:必選引數、預設引數、可變引數、命名關鍵字引數和關鍵字引數。
8 函式及引數
一.函式 1.含義 包裹一部分 實現某乙個功能 達成某乙個目的 2.特點 可以反覆呼叫,提高 的復用性,提高開發效率,便於維護管理 3.函式的格式 定義函式 def 函式名 code 呼叫函式 函式名 4.函式的命名 命名規則與變數一樣 字母數字下劃線,首字元不能用數字 嚴格區分大小寫,且不能用關鍵...
Python 函式 8 可變長引數
可變長引數 可變長指的是實參的個數不固定 按位置定義的可變長的實參 按關鍵字定義的可變長的實參 一 按位置 def func x,y,args print x,y print args func 1,2,3,4,5 處理按位置定義的多出的實參 然後賦值給 後的變數來儲存成乙個元組的形式 args 3...
函式的引數
參考 先說一下預設引數 當我們呼叫乙個函式的時候,忘記傳入相應的引數了,那麼函式肯定呼叫失敗。為了讓函式可以在 失誤 的情況下也可以呼叫出來,那麼預設引數就可以派上用場了。例如,計算x2 可以完全把第二個引數值設為預設引數。def power x,n 2 s 1 while n 0 n n 1 s ...