Python函数中的操作符:/、*、...

Python函数中的操作符:/、*、...

    • 1、背景
    • 2、Python新操作符:/与*
    • 3、Python操作符:*(打包与解包)
    • 4、Python新操作符:...


1、背景


在Python的一些API中,我们可能会见到一些这样的操作符:

def func(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): ...

其中的/*...分别是什么含义呢?

2、Python新操作符:/与*


从python3.8开始,函数参数中允许出现/*符号,/用来指明某些函数形参必须使用位置参数而非关键字参数的形式,*出现在函数参数中第一种含义可以表示为可变参数,一般写作*args;对于单独出现在参数中的*参数,则表示*后面的参数必须为关键字参数的形式,接下来详细解释一下该用法

按照Python3.8官网描述:

def func(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): ...-----------   -----------     ----------|                |               ||       Positional or keyword    ||                                Keyword onlyPositional only

官方的解释是这样的:

  • /*是可选的
  • /前面的参数都是仅位置参数(Positional-Only Parameter),即参数只能通过位置参数的形式传入函数,不能通过关键字的形式传入函数
  • /*之间的是位置或关键字参数(Positional-or-Keyword Parameter),即参数可以通过位置参数的形式参入函数,也可以通过关键字的形式传入函数
  • *后面的参数是仅关键字参数(Keyword-Only Parameter),即只能通过关键字传入参数

总结就是:

  • /符号之前的所有参数,都必须以位置参数穿参,不能使用关键字参数传参
  • *符号之后的所有参数,都必须以关键字方式传参,不能使用位置参数传参
  • /*符号之间的所有参数,既能使用关键字方式传参,也能使用位置参数传参

示例如下:

def f1(p1, p2, /, pk, *, k1, k2):print(p1 + p2 + pk + k1 + k2)f1(2, 3, pk=1, k1=5, k2=4)    # 15
f1(2, 3, 1, k1=5, k2=4)       # 15

那这样写呢?

def f2(p1, p2, *, pk, /, k1, k2):print(p1 + p2 + pk + k1 + k2)

值得注意的是,Python不支持该写法(*在/前),虽然方法本身不会报错,但函数还没调用就会执行报错:SyntaxError: invalid syntax

3、Python操作符:*(打包与解包)


*操作的本质是对可迭代对象的解包

什么是Python打包与解包呢?

# 打包
scores = 80, 90, 900, 120
# 解包:被解包的序列中的元素数量必须与赋值符号=左边元素的数量完全一样
a, *b, c = scores
print(a, b, c)    # 80 [90, 900] 120
# 打包
scores = [80, 90]
# 解包:不能将*操作符用于表达式的右边
x, y = scores     # 80 90
print(x, y)

打包其实就是多个对象的可迭代集合

解包即就是将可迭代集合拆分成多个对象,并保证拆分前后的数量

例如,我们常见的函数可变参数:*args**kwargs

  • *args将多个参数打包成一个元组
  • **kwargs将多个K-V参数打包成一个字典

4、Python新操作符:…


操作符...表示函数没有实现任何代码,跟pass作用类似

def m(): ...
# 等价于
def n(): pass

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

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

相关文章

certbot—30秒部署你的HTTPS,永久免费,自动续约

在之前我已经介绍过部署反向代理的2种方式了。第一种是通过宝塔的反向代理配置然后开启HTTPS。 第二种是通过nginxproxymanager。 今天要给大家分享的是一个 certbot。 Certbot 是一个由 Lets Encrypt 开发的免费开源工具,用于自动化部署和管理 SSL/TLS 证书。它具有…

SpringBoot3.x + mp代码生成器(更新系列)

小伙伴们,有没有这样一个体验,每次开始写一个项目时,搭建项目环境,建entity,mapper,service,controller层文件的感到繁琐,这属实体力活呀!然而,自从有了Mybat…

【二分查找】LeetCode1970:你能穿过矩阵的最后一天

本文涉及的基础知识点 二分查找算法合集 作者推荐 动态规划LeetCode2552:优化了6版的1324模式 题目 给你一个下标从 1 开始的二进制矩阵,其中 0 表示陆地,1 表示水域。同时给你 row 和 col 分别表示矩阵中行和列的数目。 一开始在第 0 …

【开源】基于JAVA的大病保险管理系统

项目编号: S 031 ,文末获取源码。 \color{red}{项目编号:S031,文末获取源码。} 项目编号:S031,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统配置维护2.2 系统参保管理2.3 大…

uniapp是否可以用elementUI等前端UI库、使用步骤以及需要注意的问题

文章目录 uniapp是否可以用elementUI等前端UI库使用方法和步骤问题如何解决 uniapp是否可以用elementUI等前端UI库 在PC端开发uniapp,可以用elementUI,因为elementUI就是PC端的。 在使用uniapp,选择vue2.0时,实测可以用nodejs16的…

java企业财务管理系统springboot+jsp

1、基本内容 (1)搭建基础环境,下载JDK、开发工具eclipse/idea。 (2)通过HTML/CSS/JS搭建前端框架。 (3)下载MySql数据库,设计数据库表,用于存储系统数据。 (4…

三、使用CRT连接三台虚拟机

目录 1、建立连接 2、参数配置 3、设置主题,颜色和仿真 1、建立连接

【JavaSE】I/O流(学习笔记)

一、File类 1、构造的三种方法 File f1 new File("//Users//wangminghao//Desktop//demo.txt"); System.out.println(f1);File f2 new File("//Users//wangminghao//Desktop","demo.txt"); System.out.println(f2);File f3 new File("…

SQL server 2016安装

1、关系数据库的基本概念。 行:每行成为一条“记录”或“元组”,用于描述一个对象的信息。 列:每列称为一个“字段”或“属性”,用于描述对象的一个属性。 2、主键与外键。 主键:键,即关键字。主键由一个或…

Android--Jetpack--Lifecycle详解

富贵本无根,尽从勤里得 一,定义 Lifecycle 是一个具备宿主生命周期感知能力的组件。它持有组件(Activity/Fragment)生命周期状态信息,并且允许其观察者监听宿主生命周期状态变化。 顾名思义,Lifecycle的主…

TA-Lib学习研究笔记(八)——Momentum Indicators 上

TA-Lib学习研究笔记(八)——Momentum Indicators 上 Momentum Indicators 动量指标,是最重要的股票分析指标,能够通过数据量化分析价格、成交量,预测股票走势和强度,大部分指标都在股票软件中提供。 1. A…

ChatGpt回答人工智能发展利大于弊的辩证论述

ChatGpt回答人工智能发展利大于弊的辩证论述 ​ 随着科技的迅猛发展,人工智能(AI)在各个领域展现出强大的潜力,引发了广泛的关注和讨论。在这场变革中,人们对于人工智能的发展是否对人类有益的争论也愈发激烈。本文将…

离散化算法总结

离散化是将大范围的数字映射到小范围的区间内,适用于稀疏的区间。 两个问题需要考虑: 1. 原数组中可能有重复元素,需要去重。 2. 如何算出离散化后的值(离散化后保序,使用二分)。 题目链接: …

水利安全监测方案——基于RTU200的解决方案

引言: 水资源是人类赖以生存的重要基础,对于保障水利系统安全运行以及应对自然灾害起着关键作用。为了实现水利安全监测的目标,我们提出了基于RTU200的解决方案。本方案将结合RTU200的可靠性、灵活性和高效性,为您打造一个全面的…

[笔记]dubbo发送接收

公司需要使用java技术栈接入一套自定义的通讯协议,所以参考下dubbo的实现原理。 consumer 主要使用ThreadlessExecutor实现全consumer的全双工通讯。consumer创建本次请求的requestId用于将response和request匹配。 然后分以下几步完成一次请求发送并接收结果&…

GlusterFS + 防火墙访问控制+提供NFS服务

一、安装GlusterFS centos: yum -y install centos-release-gluster yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma systemctl start glusterd.service #开启服务 systemctl enable glusterd.service #开机自启 systemctl sta…

Elasticsearch分词器--空格分词器(whitespace analyzer)

介绍 文本分析,是将全文本转换为一系列单词的过程,也叫分词。analysis是通过analyzer(分词器)来实现的,可以使用Elasticearch内置的分词器,也可以自己去定制一些分词器。除了在数据写入时将词条进行转换,那么在查询的时…

Spring 多数据源搭建

目录 前言 正文 1.Druid 介绍和使用 2.其他多数据源解决方案 总结 前言 对于复杂的业务和项目,可能在一个单体项目中存在需要连接多个数据库的情况。这时,就会使用到多数据源,实际中遇到的可能性比较大。 正文 如果一个项目中需要连…

@2023 中国家居家具行业数字化转型分析与案例解读|商派徐礼昭

作者:徐礼昭(商派市场负责人,重构零售实验室负责人) 中国的家居家具行业面临着市场竞争激烈、消费者需求多变等诸多挑战。为了应对这些挑战,许多品牌企业开始探索数字化转型的道路,以提升竞争力并满足消费…

机器学习笔记 - 如何在Python中对网格和点云进行体素化?

一、简述 本文主要是为了了解如何生成体素表示,体素之于3D就像像素之于2D。体素本质上是 3D 像素,但它们不是正方形,而是完美的立方体。 理论上,体素是复制现实的完美建模技术。 这里我们要了解四个广泛流行的 Python 库(Open3D、Trimesh、PyVista、pyntcloud )生成点云…