Python3.8新特性--PositionalOnly参数
“理论联系实惠,密切联系领导,表扬和自我表扬”——我就是老司机,曾经写文章教各位怎么打拼职场的老司机。
不记得没关系,只需要知道:有这么一位老司机,
穿上西装带大家打拼职场!
操起键盘带大家打磨技术!
2019年10月中旬,Python 3.8发布了。
英语好的Python爱好者,可以看看官宣:
https://docs.python.org/3.8/whatsnew/3.8.html
今天老司机给大家讲一下新特性中比较语焉不详的 “Positional-only参数”。
先看一段原文:
后面的基本没怎么解释了…
老司机第一次看时候,觉得有点儿一头雾水。
没关系,计算机是一种实践科学。撸码试试看。
安装好最新的Python 3.8,配好最新的PyCharm。
先按照例子来:
def func1(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
func1(1,2,3,d=4,e=5,f=6)
# func1(1,2,3, 4,e=5,f=6) #这样也可以
# 输出 1 2 3 4 5 6
官网的例子能通过,不能说明什么,还是不明白“/”和“*”的区别。
小心谨慎改造一下:
def func1(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
def func2(a1, /, b1, *, c1):
print(a1, b1, c1)
func1(1,2,3,4,e=5,f=6)
func2(10,20, c1=30)
# 输出
1 2 3 4 5 6
10 20 30
再改造一下,这次去掉“*”:
def func1(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
def func2(a1, /, b1, *, c1):
print(a1, b1, c1)
def func3(a2, /, b2):
print(a2, b2)
func1(1,2,3,4,e=5,f=6)
func2(10,20, c1=30)
func3(100, 200)
# func3(100, b2=200) # 效果一样
# 输出
1 2 3 4 5 6
10 20 30
100 200
对比一下,去掉“/”,只留“*”
def func1(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
def func2(a1, /, b1, *, c1):
print(a1, b1, c1)
def func3(a2, /, b2):
print(a2, b2)
def func4(*, a3):
print(a3)
func1(1,2,3,4,e=5,f=6)
func2(10,20, c1=30)
func3(100, 200)
# func3(100, b2=200) 也没问题
func4(a3=1000) # 不写a3=,则报错
# 输出:
1 2 3 4 5 6
10 20 30
100 200
1000
规律基本看出来了吧?
•“/”前,必须用位置变量;
•“/”后,“*”前,可用位置变量,可用关键字变量;
•“*”后,必须用关键字变量形式。
看看相关的PEP文档PEP570:
https://www.python.org/dev/peps/pep-0570/
里面有一段,这么写的:
实践和理论(PEP文档)都对上了吧?
学Python,多看PEP文档,除了好处,还有更多的好处。
面试时候,如果你能引经据典说出PEP文档如何如何写的,你看哪个面试官会不高看一眼?
多数情况下,直接初级转中级,“手动点点点“”变“性能自动化”。
前提是被面试人说对了,对吧? ^_^
作 者:Testfan Arthur
出 处:微信公众号:自动化软件测试平台
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接
Python3.8新特性--PositionalOnly参数的更多相关文章
- 字符串格式的方法%s、format和python3.6新特性f-string和类型注解
一.%s msg = '我叫%s,今年%s,性别%s' %('帅哥',18,'男') print(msg) # 我叫帅哥,今年18,性别男 二.format # 三种方式: # 第一种:按顺序接收参数 ...
- python3.8 新特性
https://docs.python.org/3.8/whatsnew/3.8.html python 3.8的新功能本文解释了与3.7相比,python 3.8中的新特性. 有关完整的详细信息,请 ...
- python3.6 新特性学习
#支持类型提示 typing { def greeting(name: str) -> str: return 'Hello ' + name #在函数greeting中,参数名称的类型为str ...
- python3.8新特性
海象运算符(赋值运算符) #原来 def choice(): s = ' jsadlk '.strip() res = isinstance(s, int) if res: return 'int' ...
- 你不得不了解的Python3.x新特性
从 3.0 到 3.8,Python 3 已经更新了一波又一波,但似乎我们用起来和 2.7 没有太大区别?以前该怎么写 2.7 的代码现在就怎么写,只不过少数表达方式变了而已.在这篇文章中,作者介绍了 ...
- C#4.0新特性:可选参数,命名参数,Dynamic
1.可选参数 可以为方法的参数设置一个默认值,如下: class Program { static void Main(string[] args) { Show(); Show("cary ...
- Python3.8新特性-- 海象操作符
“理论联系实惠,密切联系领导,表扬和自我表扬”——我就是老司机,曾经写文章教各位怎么打拼职场的老司机. 不记得没关系,只需要知道:有这么一位老司机, 穿上西装带大家打拼职场! 操起键盘带大家打磨技术! ...
- C# 9.0 新特性之参数非空检查简化
阅读本文大概需要 1.5 分钟. 参数非空检查是缩写类库很常见的操作,在一个方法中要求参数不能为空,否则抛出相应的异常.比如: public static string HashPassword(st ...
- Python3.X新特性之print和exec
print print 现在是一个函数,不再是一个语句.<语法更为清晰> 实例1 打开文件 log.txt 以便进行写入并将对象指定给 fid.然后利用 print将一个字符串重定向给文件 ...
随机推荐
- java 与 c# 3des 加解密
java 与 c# 3des 加解密 主要差异如下: 1. 对于待加密解密的数据,各自的填充模式不一样 C#的模式有:ANSIX923.ISO10126.None.PKCS7.Zero,而Jav ...
- AES 加密算法的原理详解
AES 加密算法的原理详解 本教程摘选自 https://blog.csdn.net/qq_28205153/article/details/55798628 的原理部分. AES简介 高级加密标准( ...
- JavaScript(5)—— 变量及数据类型
JavaScript和Java在概念和设计方面都是完全不同的语言.JavaScript由Brendan Eich于1995年发明,并于1997年成为ECMA标准.ECMA-262是官方名称.ECMAS ...
- MBProgressHUD长时间加载无法取消的解决方法
使用MBProgressHUD时,加载网路数据,或者等待webview加载完毕,长时间的等待导致体验不佳,这时候希望点击屏幕取消加载动画效果: // MBProgressHUD.h @protocol ...
- 《精通并发与Netty》学习笔记(03 - 客户端程序编写)
上节我们编写了netty服务端的程序,这节我们来写客户端程序 第一步:改造服务端程序为: (1)MyServer类: package com.ssy.netty.demo01; import io.n ...
- C学习笔记-字符串的格式化输出和输入
存储方式 字符串是内存中一段连续的char空间,以'\0'结尾 字符串就是0结尾的连续char的内存 '\0' <=> 0 <=> null printf函数,putchar函 ...
- 阿里redis
参考: 连接: https://help.aliyun.com/document_detail/43848.html?spm=a2c4g.11186623.2.29.295542efrNOQy0 同R ...
- Springboot使用launch.script打包后解压缩
今天拿到一个SpringBoot的jar需要反编译看一下.直接用工具试了下提示报错. 于是用文本工具打开看了下,发现此JAR包在打包时候引入了启动脚本.如下图: 为了反编译,可以直接将所有启动脚本相关 ...
- 【Python】【基础知识】【内置函数】【object的使用方法】
原英文帮助文档: class object Return a new featureless object. object is a base for all classes. It has the ...
- shell 如何避免误删目录
1.变量为空导致误删文件 base_path=/usr/sbin tmp_file=`cmd_invalid` # rm -rf $base_path/$tmp_file 这种情况下如果 cmd 执行 ...