Python3函数中特殊形参的使用:*、*args、**kwargs

==用法1:不定长参数==

当函数需要的参数数量不确定的时候,可以使用*args 和 **kwargs ,

所有的位置参数保存在*args中,以元组的形式保存,调用时直接用args,不需要带 *

所有的关键参数保存在**kwargs中,以字典的形式保存,调用时也直接使用kwargs

#demo1:
def func(*args, **kwargs):
    print(args)
    print(kwargs)

func("jack", 18, "male")
#output:
('jack', 18, 'male')
{}

调用时没有使用关键参数,所以kwargs字典里面是空

#demo2:
def func(*args, **kwargs):
    print(args)
    print(kwargs)

func(name="jack", age=18, sex="male")
#output:
()
{'name': 'jack', 'age': 18, 'sex': 'male'}

调用时没有使用位置参数,所以args元组里面是空,且使用的关键字名不用出现在函数定义的参数列表里

#demo3:
def func(*args, **kwargs):
    print(args)
    print(kwargs)

func("jack", 18, sex="male")
# func(name="jack", 18,"male") 调用时报错
#output:
('jack', 18)
{'sex': 'male'}

调同时使用位置参数和关键参数,关键参数要放在位置参数后,否则会报错

==注意:==

  • *args 和 **kwargs里面的参数名args、kwargs可以为任何变量名,约定俗成用args和kwargs

==用法2:* 和 *para 后的参数调用时必须是关键参数==

#demo1:
def func(x, *, y):
    print(x, y)

func(3, y=5)
func(x=3, y=5)
# func(x=3, 5)  报错
# func(3, 5)    报错
#output:
3 5
3 5
  • * 之后的参数调用必须是关键参数,* 之前的不限制,

  • 如果 * 放在参数列表的第一个,则后面的参数都必须用关键参数

#demo2:
def func(x, *para, y):
    print(x, para, y)

func(3, 4, y=5)
#output:
3 (4,) 5

Python3函数中特殊形参的使用:*、*args、**kwargs的更多相关文章

  1. 匿名函数中undefined形参疑问(转载)

    唉,基本功不扎实,昨天在微博上问了个问题,就匿名函数中undefined形参,不知道是干什么用的. 经常看到这样的匿名函数代码: ;(function( $, window, document,und ...

  2. Pyhton函数篇(一)之函数中的形参与实参

    1:什么是函数 函数其实就是带名字的代码块,用于完成一些具体的工作.如果我们在写一段程序的时候,需要多次用到同样的一个功能,如果每次都要重复写相同的代码,不仅会增加我们的代码量,更会让我们写出的代码让 ...

  3. tf.placeholder类似函数中的形参

    tf.placeholder(dtype, shape=None, name=None) 此函数可以理解为形参,用于定义过程,在执行的时候再赋具体的值 参数: dtype:数据类型.常用的是tf.fl ...

  4. element-ui(vue版)使用switch时change回调函数中的形参传值问题

    需求说明 有多个switch组件 需要知道switch的状态 表格中当前行(scope.row)的数据 问题描述 官方文档中对switch中change的描述: 目前能得到switch的状态值,但是无 ...

  5. (3)什么是函数(函数的定义、形参、实参、默认形参、可变长函数args|kwargs)

    什么是函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需调用其函数名即可 1.减少重复代码 2.使程序变的可扩展 3.使程序变得易维护 定义函数的语法 形参 主要的作 ...

  6. (转)Java程序利用main函数中args参数实现参数的传递

    Java程序利用main函数中args参数实现参数的传递 1.运行Java程序的同时,可以通过输入参数给main函数中的接收参数数组args[],供程序内部使用!即当你在Java命令行后面带上参数,J ...

  7. 一道题带你搞定Python函数中形参和实参问题

    昨天在Python学习群里有位路人甲问了个Python函数中关于形参和实参一个很基础的问题,虽然很基础,但是对于很多小白来说不一定简单,反而会被搞得稀里糊涂.人生苦短,我用Python. 为了解答大家 ...

  8. Python3 函数进阶1

    目录 闭包函数 什么是闭包函数 闭包函数的作用 装饰器 什么是装饰器 无参装饰器 有参装饰器 闭包函数 什么是闭包函数 闭包函数本质上就是函数嵌套和高阶函数 闭包函数的满足条件: 必须嵌套函数 内嵌函 ...

  9. C指针(2)——指针在函数中的应用(程序讲解)

    3-1.c指针用作函数参数 #include<stdio.h> typedef unsigned char uint8_t; //类型自定义,通过typedef语句重新把unsigned ...

随机推荐

  1. Java arraylist重复使用问题

    arraylist同一个实例重复使用时,需要使用clear()及时清空,否则会在上次的结果后面添加项. List<Double> weightsList = new ArrayList&l ...

  2. 【经典转载】关于Struts2的拦截器

    拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...

  3. SpringCloud-Eureka-Provider&Consumer

    Eureka-Provider 服务的提供者 新建一个服务提供者项目 1.导入pom文件 <properties> <java.version>1.8</java.ver ...

  4. C# json格式的序列化与反序列化

    使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象 Json[javascript对象表示方法],它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易 ...

  5. 阿里云服务器安装mongodb

    1.下载mongodb curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.9.tgz 2.解压 tar zxvf mo ...

  6. vue + element 创建教程

    一.环境准备 node安装 node版本:v10.15.3 node下载地址:https://nodejs.org/zh-cn/ vue-cli安装 全局安装vue-cli npm install - ...

  7. 基于TI 多核DSP 的大数据智能计算处理解决方案

    北京太速科技有限公司 大数据智能计算,是未来的一个发展趋势,大数据计算系统主要完成数据的存储和管理:数据的检索与智能计算. 特别是在智能城市领域,由于人口聚集给城市带来了交通.医疗.建筑等各方面的压力 ...

  8. 使用macOS苹方替换Windows 10微软雅黑

    关于微软雅黑 Windows从Vista开始用到现在的”微软雅黑”十多年以来基本没什么大改动,而大家的显示器从CRT进化到了IPS高分屏,十年前看着还OK的字体现在在绝大多数屏幕上可能就是这个样子的: ...

  9. MAT in eclipse - memory analyzer

    In Help > Install New Software..., enter the following update site URL: http://download.eclipse.o ...

  10. CentOS下安装gdb的方法

    https://blog.csdn.net/zlk252620068/article/details/79564944