Python中定义函数时使用‘/‘和‘*’来限制输入格式的理解

news/2024/7/17 18:39:57 标签: python, 开发语言, 后端

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

1 /参数的用法

        如果你想要函数的调用者在某个参数位置只能使用位置参数而不能使用关键字参数传参,那么你只需要在所需位置后面放置一个/。

def f1(a, b, /):

    return a + b

        对于上面这个函数而言,调用f1时参数a,b只能是特定的值,而不能以关键字传参,即f1(2, 3)执行正确而f1(a=2, 3)和f1(2, b=3)将执行错误。

2 *参数的用法

        对于*的第一种用法比较常见,这里不再详述,这里主要详细解释*的第二种用法。如果你希望强迫调用者使用某些参数,且必须以关键字参数的形式传参,那么你只需要在所需位置的前一个位置放置一个*。

def f1(a, *, b, c):

    return a + b + c

        对于上面这个函数而言,调用时参数a可以任意值, 但b,c参数一定要以关键字参数的形式传参,如f1(1, b=4, c=5),否则将会报错。

def f(a, b, /, c, *, d, e):

    print(a, b, c, d, e)

        如果是这种情况下调用函数,参数a可以任意值,但参数b一定要以关键字参数的形式传参,如f2(2, b=3),但是如果想传入c参数,那么c参数的要求和b参数一样都为关键字参数形式,如f2(2,b=3,c=4)。

3 /和*都出现在函数参数中

比如我们定义一个函数f

def f(a, b, /, c, *, d, e):

    print(a, b, c, d, e)

        当我们调用函数f时,a,b参数可以为任意型python所支持的值,就是不能以关键字形式传参;c可以为任意型python所支持的值,d,e只能以关键字参数传参。以下调用方式均会抛出异常

f(a=1, 2, c=3, d=4, e=5) # a不能以关键字参数传参

f(1, 2, 3, 4, e=5) # d只能以关键字参数传参

4 总结

        如果你希望调用者使用函数时一定不能使用关键字参数传参,那么只需要把这些参数放在/前即可;如果你希望调用者使用函数时一定要使用某些参数,且必须为关键字参数传参,那么只需要把这些参数放在*后面即可。


http://www.niftyadmin.cn/n/1737957.html

相关文章

How to Read HTML DTD-from HTML4.01 Specifications

How to read the HTML DTD (tenfyguo注:important!!,定义了HTML的元素包含关系以及元素允许和不允许的嵌套内容等规则, 符合DTD定义的html格式称为well-formed html) Each element and attribute declaration in …

torch.stack()方法和torch.cat()方法的区别

torch.stack():函数stack()对序列数据内部的张量进行扩维拼接,指定维度由程序员选择(对 原始张量按照指定维度进行拼接,拼接后维度为原始维度加一,如原始维度为2*2,那么拼接后为n*2*…

pip命令下载后的缓存文件位置

C:\Users\自己的用户名\AppData\Local\pip\cache

volatile——编写多线程程序的好帮手

Volatile-Correctness,让编译器帮你检测竞争条件 Andrei Alexandrescu ye_feng译 并不是我故意想弄糟你的心情,但是在这期专栏里,我们将讨论多线程编程这一话题。正如上一期Generic里所说的,编写异常安全(exception-s…

pytorch调整模型训练的学习率

简介 torch.optim.lr_scheduler :提供了一些方法可以基于epochs的值来调整学习率。 torch.optim.lr_scheduler.ReduceLROnPlateau :则提供了基于训练中某些测量值使学习率动态下降的方法。 注意:学习率调整应该在优化器的更新之后&#xff…

css selector简介

一.Tag selector标签selecor ,也可以称为类型selector,它将对HTML页面中所有的该类型有效。 h1 {font-family:Arial, sans-serif;color:#CCCCFF;} 表示所有h1标签都适用该CSS的rule,当然为了缩短代码,适用相同的rule的多个HTML Tag可以用逗号…

tensorflow提示Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2

问题: 今天在跑tensorflow程序时,出现这个问题, 大概意思是:你的CPU支持AVX扩展,但是你安装的TensorFlow版本无法编译使用 原因: 除了通常的算术和逻辑,现代CPU提供了许多低级指令&#xff0c…

关于HTML Dom的nodeName,nodeValue,nodeType

nodeName、nodeValue 以及 nodeType 包含有关于节点的信息。 nodeName 属性含有某个节点的名称。 元素节点的 nodeName 是标签名称 属性节点的 nodeName 是属性名称 文本节点的 nodeName 永远是 #text 文档节点的 nodeName 永远是 #document 注释:nodeName 所包…