python基礎 6 函式(二)
阿新 • • 發佈:2019-01-06
1函式的引數
在Python中函式引數的定義方式有以下4種方式
1位置引數
2關鍵字引數
3預設引數
4可變引數
2位置引數
實參和形參一一對應,按位置來傳遞引數
第一實參給第一形參賦值,第二個實參給第二個形參賦值,像這種按位置傳遞的的方式就是位置引數
def sum_num(num1,num2):
print(num1+num2)
sum_num(1,2) """3"""
3關鍵字引數
我們在傳參的時候,以形參等於實參的形式忽略定義的順序進行傳參的傳參方式
def sum_num(num1, num2):
print(num1)
print(num2)
print(num1 + num2)
sum_num(num1=10, num2=20)
sum_num(num2=20, num1=10)
引數值不受位置影響
10
20
30
10
20
30
如果想要和位置引數混合使用 則須注意 位置引數在前,關鍵字引數在後 如:
def sum_num(num1, num2): print(num1) print(num2) print(num1 + num2) sum_num(10, num2=20) #位置引數在前,關鍵字引數在後 正常執行 sum_num(20, num1=10) #sum_num()為引數“num1”獲取多個值 報錯 sum_num(num1=10,20) #位置引數在後,關鍵字引數在前 報錯#
4預設引數
我們在定義引數的時候,我們給形參一個預設值,在我們呼叫函式的時候,如果不給有預設值的形參傳參,會自動採用預設值
當某個值變化的時候,我們就可以使用預設引數。
def save_userinfo(name,age,gender = '男'):
print('姓名:{},年齡:{},性別:{}'.format(name,age,gender))
save_userinfo('王斌',20)
save_userinfo('lcl',10,'女')
結果:
姓名:王斌,年齡:20,性別:男
姓名:lcl,年齡:10,性別:女
注意 預設的引數一定要寫到形參的後面
5可變引數
如果函式中的引數過多,我們定義起來非常的麻煩,呼叫起來也非常的麻煩,因此python給我們提供了可變引數型別。能處理比當初宣告時更多的引數,會將傳入的引數變成元組(*args)或者字典(**kwargs)
1,元組引數 *args
注意 :1 多個位置會被組織成為一個元組型別
2 一般情況下,變數名為args *args
def func(*aa):
print(aa) #可以傳遞任意多個形參
print(aa[0],aa[1])
func(1,2,3,4,5,) #多個位置會被組織成一個元組
def func(*args):
print(args) #可以傳遞任意多個形參
print(args[0],args[1])
func(1,2,3,4,5,) #多個位置會被組織成一個元組
兩者的程式碼完全一致,但是一般情況下選擇使用第二種命名方式
*號的打散功能
tup = (1,23,4)
print(tup) (1, 23, 4)
print(*tup) 1 23 4
lst = ['a','b','c']
print(*lst) a b c
s = 'hello'
print(*s) h e l l o
呼叫函式時的用法 例子
def func(a,b,c):
print(a,b,c,)
print(type(a))
tup = (1,2,3)
func(tup[0],tup[1],tup[2])
結果:
1 2 3
<class 'int'>
2字典引數**kwargs
通過給形參前面新增**是引數變成一個字典,多有傳遞的引數都變成字典的鍵值對,這裡傳參要求鍵等於值得形式
**kwargs 結果型別是字典,傳遞的值是以key = value方式傳入
def func(**kwargs):
print(kwargs)
print(kwargs['name'],kwargs['age'],kwargs['gender'])
func(name='zs',age=10,gender='男')
結果:
{'age': 10, 'gender': '男', 'name': 'zs'}
zs 10 男
注意 關鍵字被組織成一個字典型別的資料
** 具有將字典打散的功能
def func(name,age):
print(name,age)
dic = {'name':'zs','age':10}
func(**dic) # zs 10
func(name='zs',age='10') # zs 10
注意事項:**kwargs必須放在*args後面。
def func(a, *args, b=10, **kwargs):
print(a)
print(args)
print(b)
print(kwargs)
func('zs','ww',b = 23 ,c = 30 ,d = 49)
6 函式的巢狀
def func1():
print('1')
def func2():
func1()
print('2')
def func3():
func2()
print('3')
func3()
1
2
3