经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python3 » 查看文章
浅析PEP570新语法: 只接受位置参数
来源:jb51  时间:2019/10/15 10:47:53  对本文有异议

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

  1. In : __builtin__.eval
  2. Out: <function eval(source, globals=None, locals=None, /)>
  3. In : __builtin__.len
  4. Out: <function len(obj, /)>
  5. In : __builtin__.divmod
  6. Out: <function divmod(x, y, /)>

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

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

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

再看一个例子(bytes):

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

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

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

  1. def name(p1, p2, /, p_or_kw, *, kw):
  2. def name(p1, p2=None, /, p_or_kw=None, *, kw):
  3. def name(p1, p2=None, /, *, kw):
  4. def name(p1, p2=None, /):
  5. def name(p1, p2, /, p_or_kw):
  6. def name(p1, p2, /):

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号