1. 程式人生 > >python基礎 6 函式(二)

python基礎 6 函式(二)

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