python函数的传参

一、关键字参数

定义一个接受关键字参数的函数

def test_arg(**kargs):for key in kargs:print(f'{key}==={kargs[key]}')

这里的kargs是一个字典,但传入的参数是 '**kargs', 而非 'kargs'.

可以试试:

test_arg(A=30,B="Chinese")

但你直接传入一个字典,就会报错:

cc = {'C':'50','D':'Japan'}

 这样会报错:

test_arg(cc)

因为此时传入的cc作为一个对象,会被当成一个position argument

那么怎么传这个字典呢?

应该这样:

test_arg(**cc)

这样就是将这个字典cc拆散了,按每个键值对传入给kargs 

二、可变参数

定义一个函数,接受数量可变的参数

def test_positional_arg(*args):#args将是一个列表,但传入的是'*args', 而非'args'for i in args:print(i)
bb = ['A', 1, "China"]

错误的传参方式 

#错误传参方式
test_positional_arg(bb)

严格来说,test_positional_arg(bb) 不能算错。 

但其含义却是 bb作为一个对象传给了test_positional_arg()

bb作为一个整体,穿个了test_positional_arg 函数中的args。

所以args中就一个元素, 就是bb。

也就是说: args[0] == bb == ['A', 1, "China"] #效果1

而不是:args[0] == bb[0]=='A'

              args[1] == bb[1]==1

              args[2] == bb[2]=='China'

              #效果2

显然,我们此处想要的是效果2. 所以应该这么写:

test_positional_arg('A', 1, "China")   

如果bb是一个很长的列表,那这样写是不现实的,应该这样写:

test_positional_arg(*bb)

结论:

无论是 '*', 还是'**', 其功能是为了“拆散”了传给函数里面的位置参数或关键字参数。

拆散了是作为多个对象传给函数。

这多个对象构成函数的可变参数列表(test_positional_arg(*args)中的args)中的元素,

或作为函数关键词参数字典(test_arg(**kargs)中的kargs)中的'key:value'。

其实按直接用位置参数也能实现那种效果

三、直接用位置参数

def test_arg3(kargs):for key in kargs:print(f'{key}==={kargs[key]}')cc = {'C':'50','D':'Japan'}test_arg3(cc)

def test_positional_arg4(args):for i in args:print(i)bb = ['A', 1, "China"]
test_positional_arg4(bb)

 

四、参数默认值

定义一个有默认参数值的函数

def test_default_arg(aa,bb="China"):print(f'aa:\t{aa}')print(f'bb:\t{bb}')

 

 

 

 

关键字参数之间换个位置没关系

 

def test_default_arg2(aa,bb='China', cc='Japan'):print(f'aa:\t{aa}')print(f'bb:\t{bb}')print(f'cc:\t{cc}')

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/84404.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kali Hyper-V安装正常启动后 黑屏 只能进命令模式

问题: Hyper-V安装虚拟机Kali系统一切安装正常, 没有出现错误. 安装成功后重启,只能进入命令模式,tt1-tt6,进不去GUI桌面. 尝试: 一代二代虚拟硬盘都试过,同样问题,只能开进后进入命令模式,在命令模式下一切运行正常, 也修复过系统 GNOM等的,不管用. 以下为国外论坛给的建议,尝…

Cocos Creator 3.8 后期效果 Shader 编写(2/2) 进阶篇

前言 在上一篇文章中,麒麟子给大家分享了如何在 Cocos Creator 3.8 中的自定义管线中,添加属于自己的后期效果 Shader。 但基于 BlitScreen 的方案,我们只能编写最简单后效 Shader,如果我们想要支持更多复杂的 Shader&#xff0c…

Gitee+Jenkins(docker版)自动推送并部署Springboot项目到远程服务器

如果要参考gitlab配置请参考GitlabWebhook自动推送并更新Springboot项目 Gitlab的配置部分 环境介绍 Jenkins服务器(Centos7.6): docker安装的jenkins,参考Jenkins(docker安装)部署Springboot项目JDK1.8Maven3.6.3 注意docker安装的jenkins,而且是较新的版本,所以jenkins容器…

Tomcat的介绍和安装配置、eclipse中动态web项目的创建和运行、使用IDEA创建web项目并运行

一、Tomcat的介绍和安装配置 安装tomcat: 环境变量的配置: 配置之后重启cmd,执行startup命令,启动tomcat 在localhost:8080,能进入tomcat主界面,说明配置成功 二、eclipse中动态web项目的创建和运行 tomca…

竞赛项目 深度学习疲劳驾驶检测 opencv python

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 🔥 优…

06微服务间的通信方式

一句话导读 微服务设计的一个挑战就是服务间的通信问题,服务间通信理论上可以归结为进程间通信,进程可以是同一个机器上的,也可以是不同机器的。服务可以使用同步请求响应机制通信,也可以使用异步的基于消息中间件间的通信机制。同…

Ansible的安装和配置

安装和配置 Ansible 安装所需的软件包 创建名为 /home/greg/ansible/inventory 的静态清单文件,以满足以下要求: 172.25.250.9 是 dev 主机组的成员 172.25.250.10 是 test 主机组的成员 172.25.250.11 和 172.25.250.12 是 prod 主机组的成员 172.2…

halo --- 上传图片服务器错误

文章目录 问题定位过程1、查看日志 报错的是数据库操作异常2、再次上传一张小一点的图片3、检查nginx的配置文件 原因解决 问题 上传图片时,报错服务器错误(包括上传附件、博客文章插入图片、上传相册) 定位过程 1、查看日志 报错的是数据库…

Element组件浅尝辄止4:Button组件

Button按钮组件&#xff1a;用途太广泛了&#xff0c;几乎参与到了日常开发中的方方面面 1.如何使用&#xff1f;How? //使用type、plain、round和circle属性来定义 Button 的样式。<el-row><el-button>默认按钮</el-button><el-button type"primar…

企业微信 企业内部开发 学习笔记

官方文档 文档 术语介绍 引入pom <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-cp-spring-boot-starter</artifactId><version>4.5.3.B</version></dependency>核心代码 推送消息 final WxCp…

【Spring专题】Spring底层核心原理解析

目录 前言阅读导航前置知识Q1&#xff1a;你能描述一下JVM对象创建过程吗&#xff1f;Q2&#xff1a;Spring的特性是什么&#xff1f;前置知识总结 课程内容一、Spring容器的启动二、一般流程推测2.1 扫描2.2 IOC2.3 AOP 2.4 小结三、【扫描】过程简单推测四、【IOC】过程简单推…

分布式 - 消息队列Kafka:Kafka生产者架构和配置参数

文章目录 1. kafka 生产者发送消息整体架构2. Kafka 生产者重要参数配置01. acks02. 消息传递时间03. linger.ms04. buffer.memory05. batch.size06. max.in.flight.requests.per.connection07. compression.type08. max.request.size09. receive.buffer.bytes和 send.buffer.b…

uniapp 微信小程序 封装公共的请求js(api版本)

一、新建api文件夹 在项目目录下创建api文件夹&#xff0c;内放files跟index.js文件夹&#xff0c;files文件夹内放每个页面对应的js请求接口 1、index.js /*** api接口的统一出口*/ const api {}; const requireComponent require.context(./files, false, /\.js$/) requi…

ssm亚盛汽车配件销售业绩管理统源码和论文PPT

ssm亚盛汽车配件销售业绩管理统源码和论文PPT007 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 研究的意义 汽车配件销售类企业近年来得到长足发展,在市场份额不断扩大同时…

『PostgreSQL』在 PostgreSQL中创建只读权限和读写权限的账号

&#x1f4e3;读完这篇文章里你能收获到 理解在 PostgreSQL 数据库中创建账号的重要性以及如何进行账号管理掌握在 PostgreSQL 中创建具有只读权限和读写权限的账号的步骤和方法学会使用 SQL 命令来创建账号、为账号分配适当的权限以及控制账号对数据库的访问级别了解如何确保…

HBase-写流程

写流程顺序正如API编写顺序&#xff0c;首先创建HBase的重量级连接 &#xff08;1&#xff09;读取本地缓存中的Meta表信息&#xff1b;&#xff08;第一次启动客户端为空&#xff09; &#xff08;2&#xff09;向ZK发起读取Meta表所在位置的请求&#xff1b; &#xff08;…

MySQL 建表 及其 表的约束类型

目录 步骤&#xff1a; 1、选择数据库(mydb--自定义数据库) 2、建立班级表 3、建立学生表 4、增加约束删除约束 增添约束&#xff1a; 删除约束&#xff1a; 以班级表和学生表为例说明表的约束类型 步骤&#xff1a; 1、选择数据库(mydb--自定义数据库) 2、建立班级表 …

【图像去噪的扩散滤波】基于线性扩散滤波、边缘增强线性和非线性各向异性滤波的图像去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

SQL SERVER ip地址改别名

SQL server在使用链接服务器时必须使用别名&#xff0c;使用ip地址就会把192.188.0.2这种点也解析出来 解决方案&#xff1a; 1、物理机ip 192.168.0.66 虚拟机ip 192.168.0.115 2、在虚拟机上找到 C:\Windows\System32\drivers\etc 下的 &#xff08;我选中的文件&a…

maven Jar包反向install到本地仓库

maven Jar包反向install到本地仓库 需求实现 需求 项目打包时报错&#xff0c;缺少一个jar包。 但是在maven仓库都找不到此jar包&#xff0c;其他人提供了这个jar包。 需要把这个jar包install到本地仓库&#xff0c;使项目能正常打包运行。 实现 使用git bash命令执行以下脚…