博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
py10-函数-可变长参数
阅读量:6272 次
发布时间:2019-06-22

本文共 2051 字,大约阅读时间需要 6 分钟。

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 timedef 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')

 

转载于:https://www.cnblogs.com/yangxutao/p/7419803.html

你可能感兴趣的文章
nginx 基础文档
查看>>
LintCode: Unique Characters
查看>>
Jackson序列化和反序列化Json数据完整示例
查看>>
.net 中的DllImport
查看>>
nyoj 517 最小公倍数 【java睑板】
查看>>
include与jsp:include区别
查看>>
ftp的20 21端口和主动被动模式
查看>>
MySQL存储引擎选型
查看>>
Java中的statickeyword具体解释
查看>>
Linux车载系统的开发方向
查看>>
并发编程之五--ThreadLocal
查看>>
摄像头驱动OV7725学习笔记连载(二):0V7725 SCCB时序的实现之寄存器配置
查看>>
iOS播放短的音效
查看>>
[java] java 线程join方法详解
查看>>
JQuery datepicker 用法
查看>>
golang(2):beego 环境搭建
查看>>
天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十)态势标绘模块
查看>>
程序员社交宝典
查看>>
ABP理论学习之MVC控制器(新增)
查看>>
Netty中的三种Reactor(反应堆)
查看>>