对python中的装包与解包实例详解
作者:Python之简 发布时间:2022-05-08 11:57:59
标签:python,装包,解包
*args和 **kwargs是常用的两个参数
*args:用于接受多余的未命名的参数,元组类型。
**kwargs:用于接受形参的命名参数,字典类型的数据。
可变参数args:
def fun(n, *args):
print(n)
print(args) # 未拆包
print(*args) # 进行拆包
fun(1,2,3,4)
结果:
1
(2, 3, 4)
2 3 4
形参中的*args是接受数据的args,它是一个元组,把传入的数据放进args元组中。
函数中的args仍然是元组, *args就是将元组的数据进行拆包,一开始输入的形式。
关键字参数**kwargs
def fun(**kwargs):
print(kwargs) # 未拆包
print(*kwargs) # 进行拆包
fun(a=1, b=2)
结果:
{'a': 1, 'b': 2}
a b
*args用来接受多余的未命名参数, **kwargs是用来接受命名参数。
装包的意义就是把未命名的参数和命名的参数放在元组或字典中。
解包
上面介绍了args, kwargs的装包作用,起到作用的是、 这两个参数。
1. 解包的意义就是将传递给函数的一个列表,元组,字典,拆分成独立的多个元素然后赋值给函数中的参变量。
2. 解压字典有两种解发,一种用*解的只有key,一种用**解的有key,value。但是这个方法**只能在函数定义中使用。
def fun(*args, **kwargs):
for arg in args:
print(arg)
for k, v in kwargs.items():
print(k, v)
print('-'*50)
fun(a, c) # 参数都赋值给args,并没有kwargs的参数
fun(*a, *c) # 解压的参数都赋值给args 等价为 1, 2, 3, 'a', 'b', 'c'
fun(*a, **c) # a解压给args,c解压给kwargs 等价为 1, 2, 3, 'a'=1, 'b'=2, 'c'=3
结果:
[1, 2, 3]
{'a': 1, 'b': 2, 'c': 3}
--------------------------------------------------
1
2
3
a
b
c
--------------------------------------------------
1
2
3
a 1
b 2
c 3
问题:
在传入参数时,可变参数(*)之前不能指定参数名
def myfun(a, *b):
print(a)
print(b)
myfun(a=1,2,3,4)
myfun(a=1,2,3,4)
^
SyntaxError: positional argument follows keyword argument
2.函数传入实参时,可变参数(*)之后的参数必须指定参数名,否则就会被归到可变参数之中
def myfun(a, *b, c=None):
print(a)
print(b)
print(c)
myfun(1,2,3,c=4)
1
(2, 3)
4
3.一个函数想要使用时必须明确指定参数名,可以将所有参数都放在可变参数之后
def myfun(*, a, b):
print(a)
print(b)
myfun(a=1, b=2)
4.关键字参数都只能作为最后一个参数,前面的参数按照位置赋值还是名称赋值都可以
def myfun(a, *b, c, **d):
print(a)
print(b)
print(c)
print(d)
myfun(1, 2, w=6, c=3, d=4, e=5) # 记住可变参数(*)之前不能指定参数名
1
(2,)
3
{'w': 6, 'd': 4, 'e': 5}
来源:https://blog.csdn.net/qq_1290259791/article/details/80964432
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 前言工作中使用了redux-saga这个redux中间件,如果不明白内部原理使用起来会让人摸不着头脑,阅读源码后特意对其原理做下总结。red
- #mkdir /mysqldata2、创建/usr/sbin/bakmysql文件#nano /usr/sbin/bakmysql输入:#!
- 一共4个页面:form.asp; chk.asp; num.asp; count.asp得到一个随即数字。加密
- 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联
- 本文实例讲述了Python使用文件锁实现进程间同步功能。分享给大家供大家参考,具体如下:简介在实际应用中,会出现这种应用场景:希望shell
- 1. 基本环境安装 anaconda 环境, 由于国内登陆不了他的官网 https://www.continuum.io/downloads
- 一、使用ddt和data装饰器的大致框架如下,每个test_开头的方法,代表一条测试用例from ddt import ddt,dataim
- 本文实例讲述了Python实现配置文件备份的方法。分享给大家供大家参考。具体如下:这里平台为Linux:#!/usr/bin/python#
- 今天看YUI的视频教程,YUI的工程师介绍的一款在线的图片压缩工具,也许你用过,也许没有,不过我这里强烈推荐大家用一下,我用smush.it
- ASP页面延迟的两个简单方法 asp延时第一种 代码如下:<% Response.Buffer = Tr
- 启动sql server Net Start MSSqlServer 暂停sql server Net Pause MSSqlServer
- 我认为,出现这个问题的原因有以下几点: 1、客户端禁用了cookie 2、浏览器出现问题,暂时无法存取cookie 3、php.ini中的s
- 有时在处理不规则数据时需要提取文本包含的时间日期。dateutil.parser模块可以统一日期字符串格式。datefinder模块可以在字
- 本文实例讲述了python中list常用操作。分享给大家供大家参考。具体分析如下:1.定义list>>> li = [&q
- 介绍百度aip模块是用于实现百度云与用户接口,简单来说就是使用百度云所拥有的人工智能模块。模块使用pip install baidu-aip
- 很多人错误地认为ASP是简单、低效的代名词,认为ASP是低能的,不足挂齿的,也很简单,一学就会,一琢磨就精通。有人讲ASP不安全,写ASP的
- 动机: 排序功能让我们页面上的数据显的更人性化,是我们在网站上见过的很普遍的一个功能效果了。以往的自动排序都是用大量的脚本代码来完成的,对一
- 上python课程时需要设计一个系统,想着为系统加一个启动动画,所以做成了图片加进度条的形式。本文旨在用python实现无边框的进度条,并在
- 一、概论超大型系统的特点为:1、处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过1TB;2、系统必须提供实时响应功能,系统
- 目前市面上成熟的CMS产品有很多,无外乎两种解决方案:第一种就是用XSL+XML的方式来实现客户端具体数据;第二种是生成HTML或者SHTM