浅析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里面的几个简单例子,感受一下它的用法,期待哟

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

相关文章

  • Python网络爬虫之获取网络数据

    Python网络爬虫之获取网络数据

    本文介绍了Python中用于获取网络数据的重要工具之一——Requests库,详细讲解了Requests库的基本使用方法、请求方法、请求头、请求参数、Cookies、Session等内容,并结合实例代码展示了Requests库的应用场景
    2023-04-04
  • python使用pyecharts绘制简单的折线图

    python使用pyecharts绘制简单的折线图

    这篇文章讲给大家介绍一下python使用pyecharts绘制简单的折线图的党法步骤,文中有详细的代码示例讲解,对我们学习或工作有一定的帮助,需要的朋友可以参考下
    2023-07-07
  • Scrapy-redis爬虫分布式爬取的分析和实现

    Scrapy-redis爬虫分布式爬取的分析和实现

    所谓的scrapy-Redis实际上就是scrapy+redis,其中对redis的操作采用redis-py客户端。下面这篇文章详细介绍了Scrapy-redis爬虫分布式爬取的分析和实现,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • Python 变量教程私有变量详解

    Python 变量教程私有变量详解

    这篇文章主要介绍了Python 变量教程私有变量详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • python 函数传参之传值还是传引用的分析

    python 函数传参之传值还是传引用的分析

    这篇文章主要介绍了python 函数传参之传值还是传引用的分析,需要的朋友可以参考下
    2017-09-09
  • Python二维码生成识别实例详解

    Python二维码生成识别实例详解

    这篇文章主要介绍了Python二维码生成识别实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python实现随机生成算术题的示例代码

    Python实现随机生成算术题的示例代码

    这篇文章主要为大家详细介绍了如何利用Python实现随机生成算术题的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-04-04
  • Python基础之文件操作及光标移动详解

    Python基础之文件操作及光标移动详解

    这篇文章主要为大家介绍了Python基础之文件操作及光标移动详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 查看python安装路径及pip安装的包列表及路径

    查看python安装路径及pip安装的包列表及路径

    这篇文章主要介绍了查看python安装路径及pip安装的包列表及路径,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Python中输入和输出(打印)数据实例方法

    Python中输入和输出(打印)数据实例方法

    在本篇文章里小编给大家整理的是关于Python中输入和输出(打印)数据实例方法以及相关知识点,有需要的朋友们参考下。
    2019-10-10

最新评论