py10-函数-可变长参数

1、可变长参数

  可变长参数指的是实参的个数不固定。

  实参无非分为位置实参和关键字实参两种

2、处理可变长参数的机制

  形参必须要有两种机制来分别处理按照位置定义的实参溢出的情况:*

  按照关键字实参溢出的情况:**

  针对这两种形式的可变长,形参也应有有两种解决方案,分别是*args,**args

3、示例

  需要处理这样的函数

  示例1:

def foo(x,y):
    print(x,y)
foo(1,2,3,4,5,6)   #这样的示例需要*来处理

  处理示例1:

def foo(x,y,*nums):    #nums=(3, 4, 5, 6, 7, 8)
    print(x)
    print(y)
    print(nums)
foo(1,2,3,4,5,6,7,8)

  示例2:

def foo(x,y):
    print(x)
    print(y)
foo(x=1,y=2,a=3,b=4)    #这样的示例需要**来处理

  处理示例2:

def foo(x,y,**nums):    #nums={'b': 4, 'a': 3}
print(x)
    print(y)
    print(nums)
foo(y=2,x=1,b=4,a=3)

  通常情况将记为*args ,**kwargs

  示例3:

def foo(x,y,*args):
    print(x)
    print(y)
    print(args)
foo(1,2,3,4,5,6,7,8,9)

  示例4:

def foo(x,y,**kwargs):
    print(x)
    print(y)
    print(kwargs)
foo(1,2,a=10,b=20,c=30)

4、*args的扩展用法

  *就是位置参数,后面跟的是元组格式

def foo(x,y,*args):
    print(x)
    print(y)
    print(args)
foo(1,2,*(3,5,6,7,8))   #foo(1,2,3,5,6,7,8)

5、**kwargs的扩展用法

  **就是关键字实参,后面跟的是字典格式

def foo(x,y,**kwargs):
    print(x)
    print(y)
    print(kwargs)
foo(1,2,**{'name':'egon','age':18,'sex':'male'})    #foo(1,2,age=18,name='egon',sex='male')

6、混合使用

  *args 必须在**kwargs的前面,因为*args是位置参数,而**kwargs是关键字参数

def foo(x,*args,**kwargs):
    print(x)
    print(args)
    print(kwargs)
foo(1,3,a=2,b=1)

 

7、函数引用

import time
def register(name,age,sex='male'):
    print(name)
    print(age)
    print(sex)
    time.sleep(3)

def wrapper(*args,**kwargs):
    start_time=time.time()
    register(*args,**kwargs)
    stop_time=time.time()
    print('run time is %s' %(stop_time-start_time))
wrapper('egon',18)

8、命名关键字参数

  *后定义的参数称为命名关键字参数,必须是被以关键字实参的形式传值(有默认值的除外)

def foo(*args,x):
    print(x)
    print(args)
foo(1,2,3,4,5,x=10)
def foo(name,age,*,sex):
    print(name)
    print(age)
    print(sex)
foo('egon',18,sex='falme'
def foo(name,age,*,sex,group):
    print(name)
    print(age)
    print(sex)
    print(group)
foo('egon',18,group='it',sex='male')
def foo(name,age,*args,sex='male',group):
    print(name)
    print(age)
    print(sex)
    print(group)
foo('egon',18,22,33,44,55,group='it')

 

posted @ 2017-08-23 19:36  sysgit  阅读(308)  评论(0编辑  收藏  举报