– 在學習python過程中感謝廖雪峰的**
def 函式名
(引數1
,引數2
,引數3.
...)
: 函式體
...return
python函式的建立非常簡單,但是靈活度卻非常大。因此寫下此篇文章用於鞏固學習。
首先我們定義乙個求乙個數的平方
def getresult
(x):
return x * x
此時引數x 即為位置引數,當我們呼叫函式getresult時,必須傳入有且僅有乙個引數x
例如:
>>>
getresult(6
)36>>>
getresult(7
)49
那麼問題來了,如果要計算x3、x4、x5…難道要每次都定義乙個方法麼?
當然可以想到定義乙個擁有兩個位置引數的函式
def newgetresult
(x, n)
: result =
1while n >0:
n = n-
1 result = result * x
return result
執行結果:
>>>
newgetresult(5
,3)75
最後修改的newgetresult函式引數x、n 都是位置引數,在呼叫該函式的時候一定要保證引數的順序正確
如果newgetresult函式通常情況是計算x2 ,偶爾計算xn則可以在函式定義時使用到預設函式
例如:
def newgetresult
(x, n =2)
: result =
1while n >0:
n = n-
1 result = result * x
return result
此時n = 2就是預設引數,如果呼叫newgetresult函式時只輸入乙個引數則預設第二個引數是2
例如:
>>>
newgetresult(6
)36
當然你也可以在呼叫的時候第二個引數傳入其他的數值
例如:
>>>
newgetresult(3
,3)27
#此時第二個引數n=
3
預設引數的作用是可以簡化函式的呼叫,在定義含有『位置引數』和『預設引數』的函式時要注意『預設引數』在引數的最後邊。
舉個例子來證明預設引數簡化函式呼叫的例子,例如公司錄入一批海鮮函式
def seafood
(name, price)
:print
('name:'
, name)
print
('price:'
, price)
如果此時要增加錄入的資訊例如產地這種相對固定的資訊時,再增加乙個產地引數country,但是每次在呼叫的時候都要輸入固定的america時就相對來說比較麻煩,所以此時使用到預設引數country = 『america』
def seafood
(name, price, country =
'america'):
print
('name:'
, name)
print
('price:'
, price)
print
('country:'
, country)
預設引數很有用,但是預設引數有乙個坑要注意,定義乙個函式傳入乙個list,在函式體中加乙個『end』
def add_end(l
=):l.(
'end'
)return
l
執行:
>>>
add_end()
['end'
]>>>
add_end()
['end'
,'end'
]
可見每呼叫一次add_end()函式就會在列表加乙個』end』,造成這種情況的原因是因為在函式add_end()定義時預設引數l就被定義了,當第一次呼叫該方法時,l引用的物件新增了』end』,再次呼叫該方法的時候相當於在物件中再新增乙個』end』。
如果想定義乙個list的預設引數可以使用』none』不變引數來定義
def add_end(l
=none):if
l is none:l=
l.('end'
)return
l
這樣呼叫多少次都不會出現上邊的問題了
>>>
add_end()
['end'
]>>>
add_end()
['end'
]
根據名字就可以猜到可變引數的含義是引數個數是可變的,可以傳1個、2個…n個
例如要計算a2+b2+c2+…+n2
如果不使用可變引數的話可以使用乙個list或者tuple作為引數
def calc
(numbers)
: sum =
0for n in numbers:
sum = sum + n * n
return sum
如果使用可變引數函式定義
def calc
(*numbers)
: sum =
0for n in numbers:
sum = sum + n * n
return sum
可變引數的標誌就是在引數前加乙個*,在函式的內部numbers的型別為tuple,函式體完全不需要改變
如果有乙個list或者tuple型別的資料,在呼叫含有可變引數的函式時,這樣傳參
>>>n =[1
,2,3
,4]>>>t =(1
,2,3
,4)>>>
calc
(*n)
30>>>
calc
(*t)
30
可變引數可以傳入0個或者多個引數,引數會在函式呼叫時自動的組裝成tuple;關鍵字引數則是可以傳入0個或多個含函式名的引數,這些引數會在函式呼叫時自動組裝成dict;
def person
(name, age,
**others)
:print
(name, age, others)
執行
>>>
person
('ranc',26
)ranc 26
也可以傳入任意個關鍵字引數
>>>
person
('ranc',26
, city =
'beijing'
)ranc 26
關鍵字引數主要被用來擴充套件函式的功能,如果呼叫者想傳入更多的引數給函式也能支援
如果要限制關鍵字引數的傳遞引數名字,就可以用命名關鍵字引數,例如person函式關鍵字引數只傳city, job引數
def person
(name, age,
*, city, job)
:print
(name, age, city, job)
和關鍵字引數**others不通,命名關鍵字引數需要乙個特殊的標記符
,標記符後邊的引數都是命名關鍵字引數。
函式定義了命名關鍵字引數則在呼叫函式時必須要傳入命名關鍵字引數
如果引數中有可變引數,則可以省略標記符
在python中定義函式可以使用多種引數的組合,組合的順序是 必選引數、預設引數、可變引數、命名關鍵字引數、關鍵字引數
python 基礎之函式引數
1 可變引數 def fun1 args print args s 0for i in args s s i return s 執行結果 2 4 6 8 result 20 args為可變引數,可以接收若干個實參值,並將接受到的值組裝為乙個元祖 def fun2 name,kwargs print ...
Python基礎之函式引數
一 實參 1 實參分類 2 實參基礎 def fun01 a,b,c print a print b print c 位置傳參 實參與形參的位置依次對應 fun01 1,2,3 序列傳參 用 將序列拆分後與形參的位置依次對應 fun01 4,5,6 關鍵字傳參 實參根據形參的名稱進行對應 fun01...
Python基礎之函式的引數 二
函式引數總結 在python中函式引數的定義方式有一下4中方式。1 位置引數 2 關鍵字引數 3 預設引數 4 可變引數 args,kwargs 在我們在傳參的時候,實參傳遞的順序按照形參定義的順序進行傳遞的傳參方式。練習1 建立乙個求和函式,使用必須引數傳遞 defsum 2 num num1,n...