python 不定長參數 *argc,**kargcs(19)

在 python函數的聲明和調用 中我們簡單的瞭解了函數的相關使用,然而在函數傳遞參數的時候,我們埋下了一個坑,關於不定長參數的傳遞我們還沒有講,今天這篇文章主要就是講解這個問題。

出來混遲早是要還的

 

一.函數不定長參數語法

函數的不定長參數包含*args**kwargs,完整實例如下:

1

2

3

4

5

def function_print(*args,**kwargs): # 傳遞不定長參數,即參數個數不固定
    print(args)
    print(kwargs)
 
function_print()


輸出結果:

1

2

()

{}

代碼分析:由輸出結果可以看出來,第一個形參*args 是元組tuple類型,第二個形參**kwargs是字典dict類型.

 

1.*args的使用方法 :

a.形參 *args 類型是元組tuple,外部調用函數時傳遞的參數不論是整數還是BOOL值或者是字符串str,實際上傳遞的都是元組數據;

b.如果函數形參是不定長參數,外部調用函數傳遞多個參數時,默認按順序實參匹配形參,剩餘的參數全部作爲(元組)不定長參數傳遞;

c.如果沒有爲函數的不定長參數傳遞參數,默認爲空元組();

示例代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#普通形參
def function_print1(arg):
    print("普通形參 : arg=",arg)
 
#不定長形參
def function_print2(*args):
    print("不定長形參 : args=",args)
 
#普通形參 + 不定長形參
def function_print3(arg,*args):
    print("普通形參 + 不定長形參 : arg=",arg)
    print("普通形參 + 不定長形參 : args=",args)
 
function_print1(False)
function_print1("hello world")
print("***"*20)
 
function_print2(False)
function_print2("hello world")
print("***"*20)
 
function_print3(False) # 只爲函數傳遞了一個形參,不定長參數的形參默認爲空元組()
function_print3("hello world")
print("***"*20)
 
# 如果函數的形參是不定長參數,當外部調用函數傳遞多個參數時,默認按順序匹配形參,剩餘的參數全部作爲不定長參數傳遞
function_print3(False,1,23,4,5) 
function_print3("hello world",False,0,True,"python教程")


輸出結果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15


普通形參 : arg= False
普通形參 : arg= hello world
************************************************************
不定長形參 : args= (False,)
不定長形參 : args= ('hello world',)
************************************************************
普通形參 + 不定長形參 : arg= False
普通形參 + 不定長形參 : args= ()
普通形參 + 不定長形參 : arg= hello world
普通形參 + 不定長形參 : args= ()
************************************************************
普通形參 + 不定長形參 : arg= False
普通形參 + 不定長形參 : args= (1, 23, 4, 5)
普通形參 + 不定長形參 : arg= hello world
普通形參 + 不定長形參 : args= (False, 0, True, 'python教程')


 


2.**kwargs的使用方法

a.形參 **kwargs 類型是字典dict,函數外部調用函數傳遞參數時需要使用關鍵字參數,實參寫法:a=1,b=2,c=False,d=”hello”;

b.如果函數形參是不定長參數,外部調用函數傳遞多個參數時,默認按順序實參匹配形參,關鍵字參數全部作爲(字典)不定長參數傳遞;

c.如果沒有爲函數的不定長參數傳遞參數,默認爲空字典{};

示例代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#普通函數
def function_print1(arg):
    print("普通函數形參 : arg=",arg)
 
#普通函數不定長形參
def function_print2(**kwargs):
    print("不定長形參 : args=",kwargs)
 
#普通函數形參 + 不定長形參
def function_print3(arg,**kwargs):
    print("普通函數形參 + 不定長形參 : arg=",arg)
    print("普通函數形參 + 不定長形參 : args=",kwargs)
 
function_print1(False)
function_print1("hello world")
print("***"*20)
 
function_print2(a=False)
function_print2(c="hello world")
print("***"*20)
 
function_print3(False)
function_print3("hello world")
print("***"*20)
 
function_print3(False,a=1,b=23,h=4,v=5)
function_print3("hello world",y=False,i=0,a=True,j="python教程")


輸出結果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

普通函數形參 : arg= False
普通函數形參 : arg= hello world
************************************************************
不定長形參 : args= {'a': False}
不定長形參 : args= {'c': 'hello world'}
************************************************************
普通函數形參 + 不定長形參 : arg= False
普通函數形參 + 不定長形參 : args= {}
普通函數形參 + 不定長形參 : arg= hello world
普通函數形參 + 不定長形參 : args= {}
************************************************************
普通函數形參 + 不定長形參 : arg= False
普通函數形參 + 不定長形參 : args= {'a': 1, 'b': 23, 'h': 4, 'v': 5}
普通函數形參 + 不定長形參 : arg= hello world
普通函數形參 + 不定長形參 : args= {'y': False, 'i': 0, 'a': True, 'j': 'python教程'}


 

3.函數不定長參數*args和**kwargs只能放在形參的末尾,順序不能錯.

1

2

def function_print(arg1,*args,**kwargs): # *args,**kwargs 必須在形參的末尾,順序不能亂
    pass


別慌

二.函數不定長參數實戰


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解憂
@Blog(個人博客地址): shuopython.com
@WeChat Official Account(微信公衆號):猿說python
@Github:www.github.com
 
@File:python_args.py
@Time:2019/10/3 21:48
 
@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
"""
 
'''
普通函數形參 + 不定長形參:
    arg1:普通形參
    arg1:普通形參
    args:不定長參數-元組
    kwargs:不定長參數-字典
'''
 
def function_print(arg1,arg2,*args,**kwargs):
    print(arg1,arg2,args,kwargs)
 
function_print(False,1,b=23,h=4,v=5)
function_print("hello world",False,0,True,j="python教程",a=True)


輸出結果:

1

2

False 1 () {'b': 23, 'h': 4, 'v': 5}
hello world False (0, True) {'j': 'python教程', 'a': True}


注意:注意參數的順序匹配

 

三.重點總結

注意函數傳參的三種形式:

1.普通傳參

2.缺省參數,如果外部沒有爲缺省參數傳遞實參,形參等於默認值

3.注意不定長參數的拆包,普通實參打包爲元組tuple類型,關鍵字參數打包爲字典dict類型

 

猜你喜歡:

1.python元組

2.python字典

3.python 函數聲明和調用

 

轉載請註明猿說Python » python 函數不定長參數 *argc,**kargcs


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章