一文搞懂*argv和**kwargs(代码片段)

huaweicloud huaweicloud     2023-04-24     252

关键词:

大多刚接触Python的学员,会对*argv和**kwargs这两个魔法变量的用法产生困惑,今天本文将全面梳理下这两个小可爱的使用方法,让各位同学彻底搞懂它们的规则。

这两个变量主要用户函数定义,有了它俩你可以将不定数量的参数传递给一个函数。这里,需要申明下:在写Python代码时,我们习惯将它俩写成*argv和**kwargs,这只是一个书写习惯,你也可以任性地用*var和**kvars来代替它们,要注意的是符号*和**是必须写的。

函数在实际执行时,编程人员无法预先知道会被传入多少实参,这是不确定量,函数知道使用者会传多少个参数给它,幸好Python有*argv和**kwargs,有它俩帮我们统统接收。

听起来是不是很简单?实际上就是这么简单,下面通过两个例子分别说明。

  1. *args的用法

开宗明义,*args用来接收一个非键值对的不定数量的参数列表传给函数,记住,它接受的是列表。下面例子可以帮助理解:

1 def test(normal_arg,*argv):
2     print("the normal arg is :",normal_arg)
3     for arg in argv:
4         print("we can read from *argv:",arg)

例1 ▲

执行test(‘Python‘,‘C‘,‘Java‘,‘C++‘)之后,系统会有如下输出:

1 the normal arg is :Python
2 we can read from *argv:C
3 we can read from *argv:Java
4 we can read from *argv:C++

通过这个例子,咱们就明白了*argv的所有用法,对它的疑惑也解决了,那么接下来让我们更进一步,来研究**kwargs。

2.**kwargs

**kwargs 用来接收不定长度的键值对,把它作为参数传递给?个函数。看清楚接收的是键值对。比如我们想要在?个函数?处理带名字的参数, 类似姓名=“张三”,这时就应该使?**kwargs。

1 def show_keywords(**kwargs):
2 for key,value in kwargs.items():
3         print("0:1".format(key,value))

 例2 ▲

上面定义了一个show_keywords()函数,用**kwargs来接收输入的键值对数据。例如实际运行的情况如下,就会得到如下结果。

 1 show_keywords(name=Mike,age=25) 2 name:Mike 3 age:25 

通过上面两个简单的例子,我们分别了解了带一个‘*‘的*argv和带两个‘**‘的**kwargs的基本用法,事实上我们经常会将会arg,*argv,**kwargs这三种参数结合在一起使用的情况,那么请务必记住,在Python中它们是有先后顺序的,先arg,再*argv,最后写**kwargs,如下:

def some_fun(arg,*argv,**kwargs):

  

好了,这里对本章内容做下总结:

  1. *args 是用来接收一个参数列表,注意是列表。

  2. **kwargs 用来接收不定长度的键值对。

  3. 当函数里同时使用三种参数, 记得如下顺序:

     some_fun(args, *argv, **kwargs)

HDC.Cloud 华为开发者大会2020 即将于2020年2月11日-12日在深圳举办,是一线开发者学习实践鲲鹏通用计算、昇腾AI计算、数据库、区块链、云原生、5G等ICT开放能力的最佳舞台。

欢迎报名参会https://www.huaweicloud.com/HDC.Cloud.html?utm_source=&utm_medium=&utm_campaign=&utm_content=techcommunity

技术图片

一文教你搞懂python函数装饰器(wrapper)(代码片段)

python函数装饰器函数装饰器,定义一个装饰器后,调用改装饰器,个人理解是在目标函数前后做一些操作。例如:定义一个鉴权的函数装饰器,在给目标函数的时候添加装饰函数就可以做到先鉴权,鉴权成... 查看详情

一文搞懂防抖和节流(代码片段)

一文搞懂防抖和节流闭包作用域链闭包防抖在了解防抖和节流之前,首先要熟悉闭包的概念,因为防抖和节流函数就是使用闭包写的闭包作用域链Es6新推出了块级作用域的概念,就是大括号里面的变量都是属于这个块... 查看详情

一文搞懂web端登录过程(代码片段)

一文搞懂web端登录过程无状态HTTP协议session和cookiecookie(存放在客户的浏览器上)session(存放在服务器端)session和cookie的区别token登录过程token验证在了解登陆过程的原理前,应该先弄清楚几个概念无状态HTTP... 查看详情

一文搞懂分片上传和断点续传(代码片段)

〝古人学问遗无力,少壮功夫老始成〞一文搞懂分片上传和断点续传,对于做过文件上传的小伙伴对于这两个名词并不太陌生,而在上传大文件的业务中,这两种上传方式是经常被用到的,但是很多小白对这... 查看详情

一文搞懂分片上传和断点续传(代码片段)

〝古人学问遗无力,少壮功夫老始成〞一文搞懂分片上传和断点续传,对于做过文件上传的小伙伴对于这两个名词并不太陌生,而在上传大文件的业务中,这两种上传方式是经常被用到的,但是很多小白对这... 查看详情

http/https一文搞懂(代码片段)

HTTP协议(HyperTextTransferProtocol,超文本传输协议):是一种发布和接收HTML页面的方法。HTTPS(HypertextTransferProtocoloverSecureSocketLayer)简单讲是HTTP的安全版,在HTTP下加入SSL层。SSL(S 查看详情

http/https一文搞懂(代码片段)

HTTP协议(HyperTextTransferProtocol,超文本传输协议):是一种发布和接收HTML页面的方法。HTTPS(HypertextTransferProtocoloverSecureSocketLayer)简单讲是HTTP的安全版,在HTTP下加入SSL层。SSL(S 查看详情

一文彻底搞懂kafka(代码片段)

Kafka的学习和使用本文是基于CentOS7.9系统环境,进行Kafka的学习和使用一、Kafka的简介1.1Kafka基本概念(1)什么是KafkaKafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域(2)消息队列点对点模式... 查看详情

cas和aqs一文搞懂(代码片段)

JAVA多线程,面试官喜欢问的东西一些概念的东西原子性就是指该操作是不可再分的。不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。简而言之,在整个操作过程中不会被线程调... 查看详情

一文彻底搞懂zookeeper(代码片段)

本文是基于CentOS7.9系统环境,进行Zookeeper的学习和使用1.Zookeeper简介1.1什么是ZookeeperZookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。本质上,就是文件系统+通知机制1.2Zookeeper工作机制Zookeepe... 查看详情

一文彻底搞懂zookeeper(代码片段)

本文是基于CentOS7.9系统环境,进行Zookeeper的学习和使用1.Zookeeper简介1.1什么是ZookeeperZookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。本质上,就是文件系统+通知机制1.2Zookeeper工作机制Zookeepe... 查看详情

一文搞懂rpc原理(代码片段)

RPC原理解析什么是RPCRPC(RemoteProcedureCallProtocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP/IP或UDP,为通信程序之间携带信... 查看详情

一文搞懂http2.0和http1.0的区别(代码片段)

一文搞懂HTTP2.0和HTTP1.1的区别HTTP1.0HTTP2.0二者的区别(口语化非常容易理解)HTTP1.0http1.1当年是万维网的交流标准属于应用层协议,他把所有的请求和相应全部的都作为纯文本,而http2是把所有的请求和响应都封装... 查看详情

新手向:一文搞懂requestparampathvariablerequestbody(代码片段)

@PathVariable和@RequestParam一般用于Get请求,分别是从路径里面去获取变量,也就是把路径当做变量,后者是从请求里面获取参数。RequestBody一般用于Post请求,获取请求Body中的JSON数据RequestParam@ApiOperation(value&#... 查看详情

一文搞懂xss攻击和sql注入(代码片段)

〝古人学问遗无力,少壮功夫老始成〞在做网站开发时候,我们经常会遇到各种各样的黑客攻击,其中最常见的就是XSS攻击和SQL注入了,如果一个网站没有做好这两种安全预防措施,造成的结果是很及其严重... 查看详情

一文搞懂xss攻击和sql注入(代码片段)

〝古人学问遗无力,少壮功夫老始成〞在做网站开发时候,我们经常会遇到各种各样的黑客攻击,其中最常见的就是XSS攻击和SQL注入了,如果一个网站没有做好这两种安全预防措施,造成的结果是很及其严重... 查看详情

一文搞懂跨域问题(代码片段)

一文搞懂跨域问题同源策略跨域解决跨域办法同源策略是浏览器的一个安全策略,保证浏览器的安全运行,要求网页中的协议名,域名和端口号要完全一致,跨域违背了同源策略就会产生跨域,比如说在百度... 查看详情

一文彻底搞懂docker中的namespace(代码片段)

什么是namespacenamespace是对全局系统资源的一种封装隔离。这样可以让不同namespace的进程拥有独立的全局系统资源。这样改变一个namespace的系统资源只会影响当前namespace中的进程,对其它namespace中的资源没有影响。以前Linux也... 查看详情