# 定義可變引數
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)
)print
(power(2,
3))# 預設引數的坑
defadd_end
(l=)
:'end'
)return l
print
(add_end())
print
(add_end())
print
(add_end())
# 定義預設引數要牢記一點:預設引數必須指向不變物件!
# 可變引數
defcalc1
(numbers)
:sum=0
for n in numbers:
sum=
sum+ n * n
return
sumdef
calc2
(*numbers)
:sum=0
for n in numbers:
sum=
sum+ n * n
return
sumprint
(calc2(1,
2,3)
)print
(calc1([1
,2,3
]))num =[1
,2,3
]print
(calc2(
*num)
)print
(calc2())
print
(calc1(num)
)def
change1
(test)
: test[0]
='!'
t =[1,
2,3]
change1(t)
print
(t[0])
# output: !, list argument is a reference
defchange2
(*test)
:print
(test)
t =[1,
2,3]
change2(
*t)# output: (1, 2, 3), arguments as a tuple
# 關鍵字引數
defperson
(name, age,
**kw)
:print
('name:'
, name,
'age:'
, age,
'other:'
, kw)
person(
'fan',18
, city =
'montreal'
, height =
'1.8m'
, weight =
'70kg'
)extra =
person(
'fan',18
,**extra)
# the same output with former
# **extra表示把extra這個dict的所有key-value用關鍵字引數傳入到函式的**kw引數,
# kw將獲得乙個dict,注意kw獲得的dict是extra的乙份拷貝,對kw的改動不會影響到函式外的extra。
defperson2
(name, age,
**kw):if
'city'
in kw:
# 有city引數
print
(kw[
'city'])
if'job'
in kw:
# 有job引數
print
(kw[
'job'])
print
('name:'
, name,
'age:'
, age,
'other:'
, kw)
person2(
'jack',24
, city=
'beijing'
, addr=
'chaoyang'
, zipcode=
123456
)# 和關鍵字引數**kw不同,命名關鍵字引數需要乙個特殊分隔符 *,*後面的引數被視為命名關鍵字引數。
defperson3
(name, age,
*, city, job)
:# 命名關鍵字引數,只能用city,job作為key輸入。
print
(name, age, city, job)
person3(
'jack',24
, city=
'beijing'
, job=
'engineer'
)# person3('jack', 24, city='beijing', job='engineer', zipcode=123456), error.
defperson4
(name, age,
*args, city, job)
:print
(name, age, args, city, job)
person4(
'en',24
,'female',20
, city=
'montreal'
, job=
'ba'
)# output: # en 24 ('female', 20) montreal ba
# 如果沒有可變引數,就必須加乙個*作為特殊分隔符。如果缺少 *,python直譯器將無法識別位置引數和命名關鍵字引數:
# 引數的組合
deff1
(a, b, c=0,
*args,
**kw)
:print
('a ='
, a,
'b ='
, b,
'c ='
, c,
'args ='
, args,
'kw ='
, kw)
f1(1,2
)# output: a = 1 b = 2 c = 0 args = () kw = {}
f1(1,2
, c=3)
# output: a = 1 b = 2 c = 3 args = () kw = {}
f1(1,2
,'a'
,'b'
)# output: a = 1 b = 2 c = a args = ('b',) kw = {}
f1(1,2
,3,'a'
,'b'
, kw1=
'c')
# output: a = 1 b = 2 c = 3 args = ('a', 'b') kw =
deff2
(a, b, c=0,
*, d,
**kw)
:print
('a ='
, a,
'b ='
, b,
'c ='
, c,
'd ='
, d,
'kw ='
, kw)
f2(1,2
, d=
'd')
# output: a = 1 b = 2 c = 0 d = d kw = {}
f2(1,2
,3, d=
'99'
, ext=
none
)#output: a = 1 b = 2 c = 3 d = 99 kw =
args =(1
,2,3
,4)kw =
f1(*args,
**kw)
# output: a = 1 b = 2 c = 3 args = (4,) kw =
args =(1
,2,3
)kw =
f2(*args,
**kw)
# output: a = 1 b = 2 c = 3 d = 88 kw =
Python學習筆記 函式引數
定義函式的時候,我們把引數的名字和位置確定下來,函式的介面定義就完成了。對於函式的呼叫者來說,只需要知道如何傳遞正確的引數,以及函式將返回什麼樣的值就夠了,函式內部的複雜邏輯被封裝起來,呼叫者無需了解。python的函式引數十分靈活,可以分為 必選引數 作為函式呼叫的介面所必須具備的引數。預設引數 ...
Python學習筆記 函式引數
剛開始學習python,看了一些資料,總結記錄一下基本的python函式引數。python中函式定義,有五種引數分類,分別為 位置引數 預設引數 可變引數 關鍵字引數 命名關鍵字引數。1 位置引數 也稱必選引數,也就是函式呼叫時,必須傳遞實參值。這類引數很簡單,如下,呼叫add函式時必須傳值給引數x...
Python學習筆記 函式引數
power x,n 函式有兩個引數 x和n,這兩個引數都是位置引數,呼叫函式時,傳入的兩個值按照位置順序依次賦給引數x和n def power x,n 2 s 1 while n 0 n n 1 s s x return s預設引數必須指向不變物件!設定預設引數時,有幾點要注意 一是必選引數在前,預...