Python之函数-可变形参

Python之函数-可变形参

可变参数

  • 可变位置参数
    • 在形参前使用 * 表示该形参是可变位置参数,可以接受多个实参 它将收集来的实参组织到一个tuple中
  • 可变关键字参数
    • 在形参前使用 ** 表示该形参是可变关键字参数,可以接受多个关键字参数
    • 它将收集来的实参的名称和值,组织到一个dict中

总结:

  • 有可变位置参数和可变关键字参数
  • 可变位置参数在形参前使用一个星号*
  • 可变关键字参数在形参前使用两个星号**
  • 可变位置参数和可变关键字参数都可以收集若干个实参,可变位置参数收集形成一个tuple,可变 关键字参数收集形成一个dict
  • 混合使用参数的时候,普通参数需要放到参数列表前面,可变参数要放到参数列表的后面,可变位 置参数需要在可变关键字参数之前

形参

  • 可以有缺省值,定义时,如果没有提供该参数,动用缺省值. 缺省值的定义往后放
  • 5种
      1. 普通形参:可以有缺省值,2种传实参方式都可以用
      1. *args 可变仅位置形参,只能接收按照位置传入的实参,可以接收0个或任意个,没有缺省值
      1. **kwargs 可变仅关键字形参,只能接收关键字传入的实参,可以接收0个或任意个. 形参的最后一个, 没有缺省值
  1. 普通形参
def add(x, y=5):print(x, y)return x + y
add(1), add(7, y=5), add(x=9), add(x=4, y=0), add(y=8, x=9)# 返回结果:1 5
# 返回结果:7 5
# 返回结果:9 5
# 返回结果:4 0
# 返回结果:9 8
# 返回结果:(6, 12, 14, 4, 17)
add(), add(y=7), add(y=6, 7)# x位置参数必须传参
# 报错内容:SyntaxError: positional argument follows keyword argument
def add(x=4, y):print(x, y)# 缺省值的定义往后放,否则就会报错
# 报错内容:SyntaxError: non-default argument follows default argument
  1. *args 可变仅位置形参
def add(*nums):print(type(nums),nums)# 定义函数add,形参是*nums,type查看类型
add, add(1), add(1, 2), add(1, 2, [1])# add查看函数签名,add()中写入形参返回类型是元组
# 返回结果:<class 'tuple'> (1,)
# 返回结果:<class 'tuple'> (1, 2)
# 返回结果:<class 'tuple'> (1, 2, [1])
# 返回结果:(<function __main__.add(*nums)>, None, None, None)
def add(*nums):print(type(nums), nums)s = 0for i in nums:s += ireturn s# 求和运算
add(1, 3, 5)# 执行函数add传入形参1, 3, 5
# 返回结果:<class 'tuple'> (1, 3, 5)
# 返回结果:9
add(range(5))# nums (range(0, 5)) range对象是惰性的没有调用的时候只是一个展现形式
# 报错内容:TypeError: unsupported operand type(s) for +=: 'int' and 'range'
add(nums=[1, 3, 5])# 不认关键字传参,只认位置传参
# 报错内容:TypeError: unsupported operand type(s) for +=: 'int' and 'range'
  1. **kwargs 可变仅关键字形参
def add(**kwargs):print(type(kwargs), kwargs)# 可变仅关键字形参的函数
add(x=1, y=4)# 只能传递关键字参数,返回类型是dict字典
# 返回结果:<class 'dict'> {'x': 1, 'y': 4}
add(1)# 翻译:你给了1个位置参数,我不接受位置参数
# 报错内容:TypeError: add() takes 0 positional arguments but 1 was given
def add(**kwargs):print(type(kwargs), kwargs)for k,v in kwargs.items():print(k, v)# 定义add函数,形参是**kwargs 可变仅关键字形参,先打印类型和kwargs的内容,循环取k,v的值在进行打印
add(x=1, y=4)# 返回结果:<class 'dict'> {'x': 1, 'y': 4}
# 返回结果:x 1
# 返回结果:y 4

混合使用

def config(host, port, **kwargs):print(host)print(port)print(kwargs)# 定义一个config函数
config('localhost', '3306')# 调用config函数,指定形参按位置传参,**kwargs没有传入参数所以返回空字典。
# 返回结果:localhost
# 返回结果:3306
# 返回结果:{}
config('localhost', '3306', username='Runaway')# **kwargs传入参数username='Runaway'字典形式返回,这么做为了指定用户名
# 返回结果:localhost
# 返回结果:3306
# 返回结果:{'username': 'Runaway'}
config('localhost', '3306', db='cmdb')# **kwargs传入参数db='cmdb'字典形式返回,这么做为了指定需要连接的数据库
# 返回结果:localhost
# 返回结果:3306
# 返回结果:{'db': 'cmdb'}
def config(host, port, *args, **kwargs):print(host, port, args, kwargs)# 重新定义config函数
config(1, 2, 3, 4, 5)# 调用函数config
# 为什么字典是空的,因为1,2按位置给了host和port,3,4,5都被*args收入元组了
# 返回结果:1 2 (3, 4, 5) {}
config(1, 2, x=1, y=2)# 调用函数config
# 为什么元组是空的,因为1,2按位置给了host和port,x和y匹配不上关键字所以被**kwargs收入字典了
# 返回结果:1 2 () {'x': 1, 'y': 2}

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

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

相关文章

QT 自定义抽屉式窗口,上层覆盖下层界面,下层布局不改变

一、自定义需要弹出的窗口&#xff08;弹出按钮放在该窗口&#xff0c;且外发按钮信号&#xff09;&#xff0c;注&#xff1a;需要设置背景色&#xff0c;不然弹出是透明的&#xff08;不知道原因&#xff09; 二、主窗口初始化 int m_popBtnWidth 0;int m_beginPosX 0;int…

在Mac上安装MongoDB 5.0

MongoDB 5.0安装 1、环境描述 操作系统&#xff1a;macOS 14.0 (23A344) 2、安装MongoDB 2.1、tar解压包安装 下载地址&#xff1a;Download MongoDB Community Server | MongoDB 创建一个目录&#xff0c;以便数据库将文件放入其中。&#xff08;默认情况下&#xff0c;数据…

linux--

一、crond 任务调度 1、原理示意图 2、crontab 进行定时任务的设置 2.1. 概述 任务调度&#xff0c;是指系统在某个时间执行的特定的命令或程序。任务调度分类&#xff1a; 系统工作: 有些重要的工作必须周而复始地执行。如病毒扫描等 个别用户工作:个别用户可能希望执行某些…

深度学习:张量 介绍

张量[1]是向量和矩阵到 n 维的推广。了解它们如何相互作用是机器学习的基础。 简介 虽然张量看起来是复杂的对象&#xff0c;但它们可以理解为向量和矩阵的集合。理解向量和矩阵对于理解张量至关重要。 向量是元素的一维列表&#xff1a; 矩阵是向量的二维列表&#xff1a; 下标…

Ajax学习笔记第三天

做决定之前仔细考虑&#xff0c;一旦作了决定就要勇往直前、坚持到底&#xff01; 【1 ikunGG邮箱注册】 整个流程展示&#xff1a; 1.文件目录 2.页面效果展示及代码 mysql数据库中的初始表 2.1 主页 09.html:里面代码部分解释 display: inline-block; 让块元素h1变成行内…

vscode插件开发

开发 Visual Studio Code (VSCode) 插件需要使用 TypeScript 或 JavaScript 语言&#xff0c;并使用 VSCode 提供的插件 API。以下是一个简单的示例&#xff0c;演示如何创建一个 VSCode 插件来显示 “Hello World” 的消息。 步骤 1&#xff1a;准备开发环境 首先&#xff0…

OpenCV C++ 图像处理实战 ——《缺陷检测》

OpenCV C++ 图像处理实战 ——《缺陷检测》 一、结果演示二、缺陷检测算法2.1、多元模板图像2.2、训练差异模型三、图像配准3.1 功能源码3.1 功能效果四、多元模板图像4.1 功能源码五、缺陷检测5.1 功能源码六、源码测试图像下载总结一、结果演示

pytorch笔记:TRIPLETMARGINLOSS

1 介绍 创建一个衡量三元组损失的标准&#xff0c;给定输入张量 x1​、x2​ 和 x3​ 以及一个大于0的间距值。这用于测量样本之间的相对相似性。一个三元组由a、p和n组成&#xff08;锚点、正例和负例&#xff09;。所有输入张量的形状都应为 (N,D) 2 基本使用方法 torch.nn.…

AD9371 官方例程HDL详解之JESD204B RX侧格式配置

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 采样率和各个时钟之间的关系 &#xff1a; AD9371 官方例程HDL详解之JESD204B TX侧时钟生成 &#xff08;三&#xff09; 参考资料&#xff1a; UltraScale Architecture G…

【AD9361 数字接口CMOS LVDSSPI】D 串行数据之SPI

【AD9361 数字接口CMOS &LVDS&SPI】D部分 接续 【AD9361 数字接口CMOS &LVDS&SPI】A 并行数据之CMOS 串行外设接口&#xff08;SPI&#xff09; SPI总线为AD9361的所有数字控制提供机制。每个SPI寄存器的宽度为8位&#xff0c;每个寄存器包含控制位、状态监视…

【OpenCV实现平滑图像金字塔,轮廓:入门】

文章目录 概要图像金字塔轮廓&#xff1a;入门 概要 文章内容的概要&#xff1a; 平滑图像金字塔&#xff1a; 图像金字塔是什么&#xff1f; 图像金字塔是指将原始图像按照不同的分辨率进行多次缩小&#xff08;下采样&#xff09;得到的一系列图像。这种处理方式常用于图像…

阿里云/腾讯云国际站代理:阿里云服务器介绍

阿里云是由阿里巴巴集团旗下的云计算服务提供商。阿里云提供的服务包括云服务器、数据库服务、数据分析、人工智能、大数据、物联网等多种云计算产品和解决方案。阿里云的数据中心遍布全球多个地区&#xff0c;提供可靠且安全的云计算基础设施和服务。阿里云在中国以及全球范围…

数据链路层和DNS之间的那些事~

数据链路层&#xff0c;考虑的是两个节点之间的传输。这里面的典型协议也很多&#xff0c;最知名的就是“以太网”。我们本篇主要介绍的就是以太网协议。这个协议规定了数据链路层&#xff0c;也规定了物理层的内容。 目录 以太网帧格式 帧头 载荷 帧尾 DNS 从输入URL到…

[读论文] On Joint Learning for Solving Placement and Routing in Chip Design

0. Abstract 由于 GPU 在加速计算方面的优势和对人类专家的依赖较少&#xff0c;机器学习已成为解决布局和布线问题的新兴工具&#xff0c;这是现代芯片设计流程中的两个关键步骤。它仍处于早期阶段&#xff0c;存在一些基本问题&#xff1a;可扩展性、奖励设计和端到端学习范…

获取IEEE会议论文的标题和摘要

获取IEEE会议论文的标题和摘要 – 潘登同学的爬虫笔记 文章目录 获取IEEE会议论文的标题和摘要 -- 潘登同学的爬虫笔记 打开IEEE的高级搜索环境准备完整爬虫过程获取文章地址翻译函数获取文章标题和摘要 前几天接到导师的一个任务&#xff0c;要我去找找IEEE Transactions on K…

vue源码分析(七)—— createComponent

文章目录 前言一、createComponent 参数说明二、createComponent 源码详解1.baseCtor的实际指向2.extend 方法3.判断Ctor是否是函数的判断4.installComponentHooks方法5.返回一个带标识的组件 vnode 前言 createComponent文件的路径&#xff1a; src\core\vdom\create-componen…

【Qt之控件QKeySequenceEdit】分析及使用

描述 QKeySequenceEdit小部件允许输入一个QKeySequence。 该小部件允许用户选择一个QKeySequence&#xff0c;通常用作快捷键。当小部件获取焦点时&#xff0c;录制将开始&#xff0c;并在用户释放最后一个键后的一秒钟结束。 用户可以使用输入键盘来输入键序列。通过调用get…

如何利用 ChatGPT 提升编程技能

目录 前言代码命名与 ChatGPT设计模式与 ChatGPT代码重构与 ChatGPT代码优化与 ChatGPTChatGPT 的潜在挑战与限制成功案例分析最佳实践与注意事项结语 前言 编程是一项充满创造性和挑战的任务&#xff0c;但也是一个需要花费大量时间和精力的领域。在日益复杂的软件开发环境中…

Postman日常操作

一.Postman介绍 1.1第一个简单的demo 路特斯&#xff08;英国汽车品牌&#xff09;_百度百科 (baidu.com) 1.2 cookie 用postman测试需要登录权限的接口时&#xff0c;会被拦截&#xff0c;解决办法就是每次请求接口前&#xff0c;先执行登录&#xff0c;然后记住cookie或者to…

python html(文件/url/html字符串)转pdf

安装库 pip install pdfkit第二步 下载程序wkhtmltopdf https://wkhtmltopdf.org/downloads.html 下载7z压缩包 解压即可, 无需安装 解压后结构应该是这样, 我喜欢放在项目里, 相对路径引用(也可以使用绝对路径, 放其他地方) import pdfkit# 将 wkhtmltopdf.exe程序 路径 p…