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

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

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

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

  1. *args的用法

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

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

例1 ▲

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

the normal arg is :Python
we can read from *argv:C
we can read from *argv:Java
we can read from *argv:C++

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

2.**kwargs

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

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

例2 ▲

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

show_keywords(name='Mike',age=25)
name:Mike
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)

作者:华为云特约供稿开发者 Python编程实践

一文搞懂*argv和**kwargs相关推荐

  1. 一文搞懂指针,指针的指针,悬浮指针,野指针

    一文搞懂指针,指针的指针,悬浮指针,野指针 学习C语言过程中,指针的概念往往是重难点,伴随着时隐时显的*,令人头晕.实际上指针并非如此复杂,掌握最基础概念,有利于我们更深刻的理解指针. [百科概念] ...

  2. 一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  3. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

  4. python语言语句快的标记是什么_一文搞懂Python程序语句

    原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...

  5. 一文搞懂 Java 线程中断

    转载自   一文搞懂 Java 线程中断 在之前的一文<如何"优雅"地终止一个线程>中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程 ...

  6. 一文搞懂HMM(隐马尔可夫模型)-Viterbi algorithm

    ***一文搞懂HMM(隐马尔可夫模型)*** 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序, ...

  7. 一文搞懂如何使用Node.js进行TCP网络通信

    摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...

  8. 【UE·蓝图底层篇】一文搞懂NativeClass、GeneratedClass、BlueprintClass、ParentClass

    本文将对蓝图类UBlueprint的几个UClass成员变量NativeClass.GeneratedClass.BlueprintClass.ParentClass进行比较深入的讲解,看完之后对蓝图 ...

  9. 一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下

    B站实操视频更新 跟着拉面学习AWS--EC2, IGW, RT, NAT, SG 简介 长文多图预警,看结论可以直接拖到"总结"部分 本文承接上一篇文章介绍以下 AWS 基础概念 ...

最新文章

  1. windows2008的功能介紹及其与2003的差异
  2. Spring Boot-@ImportResource注解
  3. ehcache 清除缓存_如何设计一个本地缓存
  4. 我的第一个python web开发框架(6)——第一个Hello World
  5. python tcp实例_实现tcp的自动重连实例教程
  6. 为什么C++构造函数不能是虚函数
  7. typescript之nodejs开发
  8. 月薪30K的软件测试简历怎么包装,软件测试项目经验怎么写?软件测试简历编写,赠软件测试简历模板
  9. Flask 框架学习1
  10. Chapter.13 Copy Constructor
  11. 【JDK】win 10 / win 11:jdk 8 下载、安装、配置、验证
  12. 使用docker搭建couchbase集群
  13. 批量抓取羊毛网站信息,定时自动发送到邮箱进行阅览
  14. mongodb java 安装配置_Mongodb的java学习安装部署
  15. 笔记本连接显示器后没有声音_外接显示器后没声音怎么回事
  16. 测序数据量,测序深度和测序覆盖度
  17. Linux:UID和EUID
  18. 11.1 身在大学,不追浮云——《逆袭大学》连载
  19. 网站优化与seo的方法(seo的优化基础)
  20. 利用Event实现WinUI层与Bussiness层 跨层间动态提示

热门文章

  1. java dbcursor_优化JAVA查询Mongodb数量过大,查询熟读慢的方法
  2. c语言数组电脑显示不出来,C语言有关结构数组的一个程序为什么运行什么结果都不显示?求助~...
  3. python虚拟环境安装包_Python虚拟环境的创建和包下载过程分析
  4. Vue源码之 Vue的生命周期
  5. springcloud灰度发布实现方案
  6. nginx+tomcat+redis负载均衡,实现session共享
  7. zookeeper安装和使用
  8. 华中科技大学主校区论文被《SCI》收录的研究
  9. linux进程管道通信缺点,Linux进程通信(IPC)的方式详解
  10. mysql使用裸设备_请教dd清空裸设备问题