python函数如何实现可变参数_Python函数可变参数*args及**kwargs详解

初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水。

下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kwargs,先给出标准答案:

1. *args是arguments单词缩写,表示任意多个无名参数,是一个tuple,如 (1,2,3,'a','b','c')

2. **kwargs是keyword arguments单词缩写,表示关键字参数,是一个dict,如{'a':1,'b':2,'c':3}

示例代码:

# coding:utf-8

def foo(*args,**kwargs):

print 'args=',args

print 'kwargs=',kwargs

print '*'*20

if __name__=='__main__':

#只传参数*args=(1,2,3)

foo(1,2,3)

#只传参数**kwargs=dict(a=1,b=2,c=3)

foo(a=1,b=2,c=3)

#传入参数*args=(1,2,3)

#传入参数**kwargs=dict(a=1,b=2,c=3)

foo(1,2,3,a=1,b=2,c=3)

#传入参数*args=(1,'b','c')

#传入参数**kwargs=dict(a=1,b='b',c='c')

foo(1,'b','c',a=1,b='b',c='c')

运行结果:

args= (1, 2, 3)

kwargs= {}

********************

args= ()

kwargs= {'a': 1, 'c': 3, 'b': 2}

********************

args= (1, 2, 3)

kwargs= {'a': 1, 'c': 3, 'b': 2}

********************

args= (1, 'b', 'c')

kwargs= {'a': 1, 'c': 'c', 'b': 'b'}

********************

需要注意的是,当同时使用*args和**kwargs时,*args参数必须在**kwargs前。要是像foo(1,a=1,b=2,c=3,2,3)这样调用的话,则会提示语法错误"SyntaxError: non-keyword arg after keyword arg"。

python函数可变参数*args和**kwargs区别

#*args(元组列表)和**kwargs(字典)的区别 def tuple_test(*args): for i in args: print 'hello'+i s=('xuexi','mili' ...

python编程系列---args与kwargs详解

args与kwargs详解 """ Process([group [, target [, name [, args [, kwargs]]]]]) - target:目 ...

理解 Python 中的可变参数 *args 和 **kwargs:

默认参数:  Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def getSum(x,y=5): print "x:", x print "y:& ...

[Python学习笔记-004] 可变参数*args和**kwargs

在Python中,可变参数的传递使用*args和**kwargs来实现,其中: *args表示任意个位置参数(positional argument),被表示为一个只读的数组(tuple): **kw ...

Python函数装饰器原理与用法详解《摘》

本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

[转]Python 命令行参数和getopt模块详解

FROM : http://www.tuicool.com/articles/jaqQvq 有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Pyt ...

Python 命令行参数和getopt模块详解

有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...

python可变参数*args, **kwargs

python可变参数*args, **kwargs def foo(* args, ** kwargs): print ' args = ',  args print ' kwargs = ',  k ...

Python函数参数*args和**kwargs

1. Python中使用*args和**kwargs #!/usr/bin/env python3 # coding: utf-8 # File: args_kwargs_demo.py # Auth ...

随机推荐

Object C中的数据类型表

类型 例子 NSLog chars char 'a', '\n'  %c short int   — %hi, %hx, %ho unsigned short int   %hu, %hx, %ho ...

display模版详细介绍

ASP.NET MVC 2 Templates, Part 4: Custom Object Templates Series Index Part 1: Introduction Part 2: M ...

SqlServer2008 设置修改表设计限制

我记起来了 SQL Server 2008 对操作的安全性进行了限制 你要在Management Studio菜单栏 -工具-选项,弹出选项窗口:把 “阻止保存要求重新创建表的更改” 请的勾去掉.

JXL 读取 Excel java中jxl导出数据到excel的例子 上传文件

2010-10-14 19:17:06 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info 信息: Entferne Dat ...

PV & PVC - 每天5分钟玩转 Docker 容器技术(150)

Volume 提供了非常好的数据持久化方案,不过在可管理性上还有不足. 拿前面 AWS EBS 的例子来说,要使用 Volume,Pod 必须事先知道如下信息: 当前 Volume 来自 AWS EB ...

mvc网站迁移.net core记录

接口return Json()时序列号小写的问题 在Startup.cs->ConfigureServices方法配置一下解决 public void ConfigureServices(ISe ...

快速搭建ELK日志分析系统

一.ELK搭建篇 官网地址:https://www.elastic.co/cn/ 官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/ ...

浅谈FastJson的TypeReference用法

简单描述:看同事提交的代码,发现有一行代码 似曾相识,但却朦朦胧胧,ε=(´ο`*)))唉很明显自己没掌握呗,于是乎,就百度了一下 干货:对进行泛型的反序列化,使用TypeReference可以明确的 ...

从零开始unity特效(持续追加中)

打算重拾3d渲染了,计划把主要理论过一遍,每部分琢磨一个言之有物的demo. 因为很多东西要现学,再加上上班-8h,更新会比较慢,但会坚持. (待续) -------houdini+unity河流(2 ...

关于android SDK安装Failed to fetch URL 一点思考

最近SDK出问题了,然后在google下载了一个android-sdk-windows.rar,然后点击SDK Manager,结果一直不能刷新API Level,然后就开始在网上找了好多资料,解决这 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值