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

作者:小明 时间:2022-12-22 09:36:28 

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

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

来源:https://zhuanlan.zhihu.com/p/64246881

标签:PEP570,语法,参数
0
投稿

猜你喜欢

  • python脚本框架webpy的url映射详解

    2021-10-27 18:55:05
  • FireScope-面向Web开发者和设计者的参考手册

    2009-03-22 15:35:00
  • python wsgiref源码解析

    2023-10-20 10:56:27
  • asp 去掉html中的table正则代码函数

    2011-04-06 10:48:00
  • Pycharm搭建一个Django项目的方法步骤

    2022-04-12 12:46:41
  • python开发的自动化运维工具ansible详解

    2022-12-11 08:40:00
  • MS SQL 查询数据在数据库中所在行

    2009-04-26 19:36:00
  • Python简单遍历字典及删除元素的方法

    2021-12-31 08:57:51
  • python实现简易五子棋游戏(控制台版)

    2022-01-14 14:38:30
  • python3+selenium自动化测试框架详解

    2022-01-29 18:26:01
  • php连接不上mysql但mysql命令行操作正常的解决方法

    2023-11-18 20:02:43
  • pytest-fixture简介及其用法讲解

    2023-02-13 19:27:25
  • php相当简单的分页类

    2023-11-17 01:50:36
  • Python的函数的一些高阶特性

    2022-06-04 15:06:28
  • Asp无组件生成缩略图

    2007-10-26 12:08:00
  • 浅谈Python小波分析库Pywavelets的一点使用心得

    2023-03-11 22:55:23
  • oracle的nvl函数的使用介绍

    2023-07-19 14:42:20
  • ASP在线升级类文件源码

    2008-10-10 13:09:00
  • 善用用户反馈——浅谈用户反馈数据的处理

    2010-07-09 16:58:00
  • 构建成功web应用的十项黄金法则

    2010-09-17 19:11:00
  • asp之家 网络编程 m.aspxhome.com