浅析PEP570新语法: 只接受位置参数

 更新时间:2019年10月15日 09:00:25   作者:小明  
本文通过一个例子给大家介绍了PEP570新语法: 只接受位置参数的一些知识,感兴趣的朋友跟随小编一起看看吧

最近 PEP 570被接受了,其实要加的这个Positional-Only Parameters原来在内置的C函数上有很多都用到了:

In : __builtin__.eval
Out: <function eval(source, globals=None, locals=None, /)>
In : __builtin__.len
Out: <function len(obj, /)>
In : __builtin__.divmod
Out: <function divmod(x, y, /)>

看它们的签名,最后都有一个/,/用途是 在/左面的这些参数,只能是位置参数(不能是关键字参数):

In : divmod(3, 2)
Out: (1, 1)
In : divmod(x=3, y=2)
---------------------------------------------------------------------------
TypeError                 Traceback (most recent call last)
<ipython-input-28-6668f56246b2> in <module>
----> 1 divmod(x=3, y=2)
TypeError: divmod() takes no keyword arguments

如果使用关键字参数的方式,会报错。当然这个错有点莫名其妙。为什么要搞Positional-Only呢?就是强制使用者用位置参数!

再看一个例子(bytes):

In [68]: bytes??
Init signature: bytes(self, /, *args, **kwargs)
Docstring:
bytes(iterable_of_ints) -> bytes
bytes(string, encoding[, errors]) -> bytes
bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
bytes(int) -> bytes object of size given by the parameter initialized with null bytes
bytes() -> empty bytes object
...
In : bytes('哈哈', 'utf-8')
Out: b'\xe5\x93\x88\xe5\x93\x88'
In : bytes('哈哈', encoding='utf-8')
Out: b'\xe5\x93\x88\xe5\x93\x88'

虽然bytes也有/,但是它只约束了左边的参数(这里只有一个self),之后的encoding可以用位置参数,也能用关键字参数。

通过PEP 570,我们写的Python代码也可以支持了。你可以这样写:

def name(p1, p2, /, p_or_kw, *, kw):
def name(p1, p2=None, /, p_or_kw=None, *, kw):
def name(p1, p2=None, /, *, kw):
def name(p1, p2=None, /):
def name(p1, p2, /, p_or_kw):
def name(p1, p2, /):

在 Python 3.8 时我们就能使用这个新语法啦。现在可以通过 PEP里面的几个简单例子,感受一下它的用法,期待哟

好了,就给大家介绍到这里,希望对大家有所帮助!

相关文章

  • TensorFlow命名空间和TensorBoard图节点实例

    TensorFlow命名空间和TensorBoard图节点实例

    今天小编就为大家分享一篇TensorFlow命名空间和TensorBoard图节点实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python如何利用matplotlib绘制并列双柱状图并标注数值

    python如何利用matplotlib绘制并列双柱状图并标注数值

    Python之中最好的图表库叫matplotlib,matplotlib,顾名思义就是提供了一整套和matlab相似的API,它的文档相当完备,下面这篇文章主要给大家介绍了关于python如何利用matplotlib绘制并列双柱状图并标注数值的相关资料,需要的朋友可以参考下
    2022-04-04
  • pytorch打印网络结构的实例

    pytorch打印网络结构的实例

    今天小编就为大家分享一篇pytorch打印网络结构的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 一行Python代码制作动态二维码的实现

    一行Python代码制作动态二维码的实现

    这篇文章主要介绍了一行Python代码制作动态二维码的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Python使用Keras OCR实现从图像中删除文本

    Python使用Keras OCR实现从图像中删除文本

    这篇文章主要为大家介绍了如何在Python中利用Keras OCR实现快速地从图像中删除文本,从而作为图像分类器的预处理步骤,需要的可以参考一下
    2022-03-03
  • Python编程二分法实现冒泡算法+快速排序代码示例

    Python编程二分法实现冒泡算法+快速排序代码示例

    这篇文章主要介绍了Python编程二分法实现冒泡算法+快速排序代码示例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • python中np.random.permutation函数实例详解

    python中np.random.permutation函数实例详解

    np.random.permutation是numpy中的一个函数,它可以将一个数组中的元素随机打乱,返回一个打乱后的新数组,下面这篇文章主要给大家介绍了关于python中np.random.permutation函数的相关资料,需要的朋友可以参考下
    2023-04-04
  • Python (Win)readline和tab补全的安装方法

    Python (Win)readline和tab补全的安装方法

    今天小编就为大家分享一篇Python (Win)readline和tab补全的安装方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python之基数排序的实现

    python之基数排序的实现

    这篇文章主要介绍了python之基数排序的实现,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Python实现扫描指定目录下的子目录及文件的方法

    Python实现扫描指定目录下的子目录及文件的方法

    这篇文章主要介绍了Python实现扫描指定目录下的子目录及文件的方法,需要的朋友可以参考下
    2014-07-07

最新评论