这是Python3.8新特性的第二篇,第一篇介绍了赋值表达式,这篇文章花几分钟了解什么是仅位置参数(Positional-Only Arguments)

插播一条:我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的Python私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Python学习干货,可以送给每一位喜欢Python的小伙伴,想要获取的可以加我的企鹅Python交流群,639+584+010,即可免费获取。群里有很多志同道合的朋友,大家都在一起学习Python,在学习Python中遇到问题,都可以问我。

函数传递参数的方式繁多,有位置参数、默认参数、可变参数、关键字参数、命名关键字参数。举个例子:

defadd(x, y, *args, **kwargs):

print(f"x={x}, y={y}")

这里的 x 和 y 就是两个位置参数,我们可以这样调用

>>> add(1,2)

x=1, y=2

因为是位置参数,严格遵守位置顺序。

不过,你也可以把 x 和 y 当做命名关键字参数进行传递,参数的顺序可改变,例如把 y 放前面,不影响结果

>>> add(y=2, x=1)

x=1, y=2

第二种方式看似更灵活,出错的风险也增加了,特别是多人合作的项目中。

那么如何从语法层面上禁止这样调用,避免出错呢?

这里就可以使用Python3.8中的仅位置参数语法了,在函数定义时,参数之间可指定一个斜杠(/),斜杠前的参数严格遵守仅位置参数的定义,例如:

>>> defadd(x, y, /, *args, **kwargs):

... print(f"x={x}, y={y}")

...

>>> add(1,2)

x=1, y=2

“/“ 告诉解释器,x 和 y 是两个严格的位置参数,不能当做命名关键字参数进行传递。如果把它当作命名关键字参数进行传递参数时,会怎么样呢?

>>> add(y=2, x=1)

Traceback (most recent call last):

File"", line1,in

TypeError: add() missing2required positional arguments:'x'and'y'

报错了,系统不允许你使用这种方式调用,仅支持位置参数的方式进行调用,调用时不能指定参数的名字。

其实,这个语法在Python3.7 就有出现过,比如内置函数 float

python3.6可以指定参数名字进行调用

>>> float(x=1)

1.0

python3.7就会报错

>>> float(x=1)

Traceback (most recent call last):

File"", line1,in

TypeError: float() takes no keyword arguments

>>> float(1)

1.0

可以看下python3.7 下 float 的帮助文档

>>> help(float)

Help on class float in module builtins:

class float(object)

|  float(x=0, /)

|

|  Convert a string or number to a floating point number, if possible.

|

|  Methods defined here:

|

|  __abs__(self, /)

|      abs(self)

你会发现float定义中,也有个 “/“,说明 x 是位置参数,调用时,不能指定名字。

总结

仅位置参数的语法就是在函数定义时,位置参数用 “/” 进行分隔,调用时不允许使用命名关键字参数进行调用,你明白了吗?

python 3.8 新特性 video_1分钟了解:Python3.8 新特性:仅位置参数相关推荐

  1. Python3.8 新特性:仅位置参数

    这是Python3.8新特性的第二篇,第一篇介绍了赋值表达式,这篇文章花几分钟了解什么是仅位置参数(Positional-Only Arguments) 函数传递参数的方式繁多,有位置参数.默认参数. ...

  2. python 3.6.0新语法_详解Python3.6正式版新特性

    按照Python官网上的计划,Python3.6正式版期望在2016-12-16号发布,也就是这周五.从去年的5月份开始,Python3.6版本就已经动手开发了,期间也断断续续的发布了4个Alpha版 ...

  3. python语言入门u-Python语言十分钟快速入门

    [简介] Python(蟒蛇)是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上使用. python logo [ ...

  4. python不想学了-十分钟也学不会python?就不要学python了

    扩展:IDLE快捷键总结 Ctrl + [ .Ctrl + ] 缩进代码 Alt+3 Alt+4 注释.取消注释代码行 Alt+5 Alt+6 切换缩进方式 空格Tab Alt+/ 单词完成,只要文中 ...

  5. python高阶函数(三分钟读懂)

    python高阶函数(三分钟读懂) 函数式编程 Python中,函数是一等对象 一等对象:具有特点 ① 对象是在运行时创建的 ② 能赋值给变量或作为数据结构中的元素 ③ 能作为参数传递 ④ 能作为返回 ...

  6. Python自动化(十二):一分钟搞定几百个Excel中查找的数据

    一.需求说明 首先我们来看下今天的需求,有一份档案记录总表的Excel工作簿, 每天会根据当天日期建立新表,每天的表格内包含所有档案信息,同时也有可能会添加新的档案名.同个年度的总表在年末可能会有两. ...

  7. Python3.8 新特性:f-strings调试

    f-strings调试 这是Python3.8新特性的第三篇,第一篇介绍了Python3.8 新特性:赋值表达式,第二篇是Python3.8 新特性:仅位置参数.这篇文章介绍f-strings调试功能 ...

  8. 小猪的Python学习之旅 —— 10.三分钟上手Requests库

    小猪的Python学习之旅 -- 10.三分钟上手Requests库 标签:Python 一句话概括本文: 本节讲解Requests库的常见使用,以及一个实战项目: 扒取某一篇微信文章里所有的图片,视 ...

  9. Python3.10新特性初体验

    Python3.10新特性初体验 注:图片来源 目录 结构模式匹配 [PEP 635] union类型允许X | Y [PEP 604] 带圆括号的上下文管理器 一.结构模式匹配(新增PEP 635) ...

最新文章

  1. 最长公共子序列_Java恶意序列化背后的历史和动机
  2. python3中文手册-Python 输入和输出
  3. Nginx做负载均衡报:nginx: [emerg] could not build the types_hash
  4. IDM——服务器响应显示您没有权限下载此文件(百度网盘下载问题)
  5. FortiGate设置E-mail告警
  6. python学习---常见的内置字符串(二)
  7. 上万规模数据湖如何在实验室测试
  8. Linux按压缩率大小排序,Linux下常用压缩 解压命令与压缩比率对比
  9. Mysql数据库-面试题
  10. FPGA远程更新之限制条件
  11. Mysql常见的日期查询语句
  12. html 链接 vf,vfp 超链接
  13. 【GMSK】研究PCM/FM和GMSK的调制和解调方法
  14. 详谈软件工程之软件开发方法
  15. 做过的医药类DA及产品宣传单页
  16. ActiveX开发详解
  17. Erlang学习时间曲线
  18. 常见的http状态码以及https的通讯过程和DNS的解析过程
  19. html嵌入虎牙直播功能,虎牙开放平台-年轻人喜爱的互动直播平台,直播帮助,直播教程,虎牙直播...
  20. python数据科学导论_数据科学导论:Python语言(原书第3版)

热门文章

  1. 【PHP】伪静态 - 1. 使用正则表达式实现
  2. 易宝支付碰到 交易签名无效问题 (2)
  3. 第七课 循环神经网络与自然语言处理
  4. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第16篇]描述DSA、Schnorr和RSA-FDH的密钥生成、签名和验证算法。
  5. python get post请求_使用python封装get+post请求
  6. java api帮助文档_JAVA的Swagger界面丑、功能弱怎么破?
  7. c 的word转为html5,word与html互转(1) -- word转html
  8. margin background_margin:auto与布局展示
  9. 依赖注入底层反射原理_PHP反射机制实现自动依赖注入
  10. 火星云分发全网视频_好用的短视频一键分发软件,让工作效率提高10倍