Python参数传递中的 args, kwargs
概念
真正的Python参数传递语法是*和**,其被称为 被称为打包和解包参数。*args和**kwargs只是大家默认的一种形式。也可以写成*keys和**kkeys等其他形式。二者都是为了在不知道函数可以接收的参数的数量时,定义函数可以接收任意数目的参数。
打包参数
所谓的打包参数,就是指 该参数用作函数的形参,等函数被调用被传入不固定数目的实参时,实参被打包被传入函数。
*args
表示函数接收可变长度的非关键字参数列表作为函数的输入
exp:
def func(a,*args):
for arg in args:
print(a,arg)
func(1,2,3,4)
>> 1,2
1,3
1,4
**kwargs
表示函数接收可变长度的关键字参数字典作为函数的输入
exp:
def func(**kwargs):
for key, value in kwargs.iteritems():
print("{} = {}".format(key,value))
func(name="he", value="5")
>> name = he
value = 5
解包参数
所谓解包参数,就是在函数调用时,将需要传入的参数集合,通过解包参数 解包成和函数的各个形参相对应,并传入到函数中。
*args
在函数调用时, * 能将list或元组解包成不同的参数
exp:
def func(a,b,c,d):
print(a,b,c,d) args = (1,2,3,4)
func(*args)
>> 1 2 3 4
args = [1,2,3,4]
func(*args)
>> 1 2 3 4
**kwargs
在函数调用中,**会将已经打包好的字典,解包成独立的key-value对,并将解包后的参数传给函数形参
def func(a,b,c,d):
print(a,b,c,d) kwargs = {"a":1,"b":2,"c":3,"d":4}
func(**kwargs)
>> 1 2 3 4
额外知识-关键词参数
指在传参时指明形参的名称,并为其赋以实参的值。
exp:
def func(a,b):
return a+b
func(a=1,b=2) # 关键词参数
Python参数传递中的 args, kwargs的更多相关文章
- Python代码中func(*args, **kwargs)
这是Python函数可变参数 args及kwargs *args表示任何多个无名参数,它是一个tuple **kwargs表示关键字参数,它是一个dict 测试代码如下: def foo(*args, ...
- python 中参数*args, **kwargs
def func(*args, **kwargs): print 'args : ', args print 'kwargs :', kwargs def test(): func(1,2,'x',' ...
- 理解理解python中的'*','*args','**','**kwargs'
http://blog.csdn.net/callinglove/article/details/45483097 讲了一大堆, 我也是用来理解类继承当中的参数行为的. =============== ...
- 理解python中的'*','*args','**','**kwargs'
本文来源:http://blog.csdn.net/callinglove/article/details/45483097 让我们通过以下6步来理解: 1. 通过一个函数调用来理解’*’的作用 2. ...
- python之动态参数 *args,**kwargs和命名空间
一.函数的动态参数 *args,**kwargs, 形参的顺序1.你的函数,为了拓展,对于传入的实参数量应该是不固定,所以就需要用到万能参数,动态参数,*args, **kwargs 1,*args ...
- python之动态参数 *args,**kwargs(聚合,打散--转载
转自https://www.cnblogs.com/ellisonzhang/p/10243122.html 一.函数的动态参数 *args,**kwargs, 形参的顺序 1.你的函数,为了拓展,对 ...
- python之动态参数 *args,**kwargs(聚合,打散)
一.函数的动态参数 *args,**kwargs, 形参的顺序1.你的函数,为了拓展,对于传入的实参数量应该是不固定,所以就需要用到万能参数,动态参数,*args, **kwargs 1,*args ...
- python之路---10 *args **kwargs 命名空间 作用域 函数的嵌套
二十八.函数进阶 1. "*" 和 "**" ① 在形参位置时 都是聚合的作用 *args 位置参数→元组 **kwargs 关键字参数→ ...
- python中的*args和** kwargs区别
写了几个月的oython了总感觉除了if else for while什么都不太会,看了架构师的代码参数传递总是使用*args,**kwargs,一直搞不太明白,只是模仿着用,最近有时间想系统的学习一 ...
随机推荐
- python---反转链表
class Node: def __init__(self, data): self.data = data self.next = None class Solution: "" ...
- 日志、第三方模块(openpyxl模块)
目录 1.日志模块 2.第三方模块 内容 日志模块 1.日志模块的主要组成部分 1.logger对象:产生日志 无包装的产品 import logging logger = logging.getLo ...
- 学习打卡——CentOS 7安装
本来今天是要学习redis的,但是redis官方又不支持在win下运行,windows版本目前都是微软官方在维护.redis最新版都已经更新到7.0了,windows却还是只有3.x版本.所以随性就去 ...
- android软件简约记账app开发day10-主页面模块--头信息的展示,和之后功能完善的目标。
android软件简约记账app开发day10-主页面模块--头信息的展示,和之后功能完善的目标. 今天来写主界面头信息的展示,也就是将第一天的写的layout中的item_main_top展示到主界 ...
- javascript中的宏任务和微任务(一)
一.宏任务和微任务有哪些 宏任务:setTimeout,setInterval,ajax,dom,宏任务是由浏览器提供的 微任务:promise,async/await,微任务是由es6提供的 二.微 ...
- 【深入理解TcaplusDB技术】扫描数据接口说明——[List表]
摘要 实现扫描指定表格中的数据. 示例代码 同步调用参见章节:[List表]扫描数据示例代码. 异步调用参见章节:[List表]异步扫描数据示例代码. Client对象方法说明 注:如有未列出来的Cl ...
- 5.文件共享总结中篇-Linux服务器文件共享
今天我们来讨论Linux系统之间的文件共享,包含:SCP.FTP.rz / sz.wget 一.SCP 其实我在写SSH协议常见问题排错章节中已介绍其SCP用法. 现我把SCP常用语法格式,给大家说下 ...
- drf-Serializers
What is serializers? serializers主要作用是将原生的Python数据类型(如 model querysets )转换为web中通用的JSON,XML或其他内容类型. DR ...
- 前端面试 -HTTP系列
http和https 的区别? 端口 经济 安全性 响应速度 http 80端口 不需要 明文传输,安全性差 页面响应速度快,使用tcp的3次握手 https 443端口 费钱SSL需要ca 证书 S ...
- PHP代码审计之SQL注入
代码审计之SQL注入 SQL注入攻击(SQLInjection),是攻击者在表单中提交精心构造的sql语句,改变原来的sql语句,如果web程序没有对提交的数据经过检查,那么就会造成sql注入攻击. ...