python函数的万能参数传参详解


Posted in Python onJuly 26, 2019

我们通过一个简单的事例来展示一下函数的万能参数,我们先写一个最简单的函数

def test(*args,**kwargs):
print(args,kwargs)

然后定义两个变量

l = [1,2,3,4]
d = {"a":1,"b":2}

下面我们分别看下两种传参的方式有什么不同

第一种方式

test(l,d)

如果是使用上面的方式传参,那么l,d这2个变量都会传递给args这个形参,作为args变量的两个元素,kwargs是一个空的字典,没有任何参数传递一个他

([1, 2, 3, 4], {'a': 1, 'b': 2}) {}

我们可以看到列表l和字典d被当做一个tuple的两个元素了

第二种方式

test(*l,**d)

如果是上面的方式传参,那么l这个变量就会被赋值给args,d这个变量就会被赋值给kwargs

(1, 2, 3, 4) {'a': 1, 'b': 2}

通过上面的演示,你应该基本上了解python的万能参数了吧,也知道如果函数使用万能参数,你应该如何进行传参了把

今天被搞糊涂了,又把万能参数梳理一下

大家先看下这个函数

def foo(action=None,**kwargs):
  print("action",action,sep="=================>")
  print("kwargs", kwargs, sep="=================>")
 
d = {"a":1,"b":2} 
foo(d)
print("=".center(100,"*"))
 
foo(**d)

我执行的结果如下

python函数的万能参数传参详解

下面我来解释一下

第一种调用函数的方式,传递了一个字典进去,这个字典会被当做一个整体传递进去,这个字典会被赋值给位置变了,也就是action

第二种调用函数的方法,通过**字典的方法传递进去,他实际是这样传递的a=1,b=2这样传递进去的,实际上一个命名变量,而这2个变量的名称都不action,所以第二中调用的方式的结果就是

action为none

kwargs就是一个字典

我们在看来下第三种调用的方法

d = {"action":"action","a":1}
foo(**d)

下面在看下结果,是否就明白了一些了

python函数的万能参数传参详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
Python中实现switch功能实例解析
Jan 11 Python
Python中协程用法代码详解
Feb 10 Python
python入门前的第一课 python怎样入门
Mar 06 Python
VSCode下好用的Python插件及配置
Apr 06 Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 Python
python 中如何获取列表的索引
Jul 02 Python
Python调用Windows API函数编写录音机和音乐播放器功能
Jan 05 Python
Django 允许局域网中的机器访问你的主机操作
May 13 Python
如何在Windows中安装多个python解释器
Jun 16 Python
Python之字符串的遍历的4种方式
Dec 08 Python
python3判断IP地址的方法
Mar 04 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 #Python
Django REST Framework序列化外键获取外键的值方法
Jul 26 #Python
django admin.py 外键,反向查询的实例
Jul 26 #Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 #Python
python的re模块使用方法详解
Jul 26 #Python
Python企业编码生成系统总体系统设计概述
Jul 26 #Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 #Python
You might like
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
react.js 获取真实的DOM节点实例(必看)
2017/04/17 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
Python入门篇之列表和元组
2014/10/17 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
python如何设置静态变量
2020/09/07 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
金山毒霸系列的笔试题
2013/04/13 面试题
后勤自我鉴定
2013/10/13 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
MySQL数据库表约束讲解
2022/06/21 MySQL