启用折叠表达式的省略技巧

parameterpack的Python项目详细描述


参数包

这个模块提供了一个机制,用于编写类似于Python中的C++ 17的{a1}的东西。这是 通过选择python的大部分未使用的Ellipsisliteral来实现。

支持的运算符

  • 加法(+
  • 减法(-
  • 乘法(*
  • 整数除法(//
  • 除法(/
  • 模数(%
  • 矩阵乘法(@,仅限python>;=3.5)
  • 按位与(&
  • 按位或(|
  • 按位异或(^
  • 左移(<<
  • 右移(>>
  • __call__
  • 比较运算符(>>=<<===!=

示例

在参数包上“折叠”操作有两种方法:leftright折叠。

fromparameterpackimportpackp=pack(1,2,3)# Left foldp-...# (1 - 2) - 3 = -4p-...-4# ((1 - 2) - 3) - 4 = -8# Right fold...-p# 1 - (2 - 3) = 2...-p-4# 4 - (1 - (2 - 3)) = -2

请注意,左折叠组在左侧操作,而右折叠组在右侧操作。这只会 如果折叠操作不是关联操作(例如整数减法)的差异。

因为无法重新定义ellipsis类型的运算符,所以在二进制文件的右侧有一个右折 操作需要括号。

fromparameterpackimportpackp=pack(1,2,3)# This is an error because "4 - ..." is evaluated first.4-...-p# This is what you should do instead.4-(...-p)# 4 - (3 - (2 - 1)) = 2

您可能更喜欢在任何情况下使用括号,以保持语法清晰,避免这种潜在的疏忽。

条件链也得到支持,但它们的工作方式与其他折叠略有不同。

fromparameterpackimportpackp=pack(1,2,3)# Python evaluates "a < b < c" as "a < b and b < c", so this module does the same.p<...# 1 < 2 < 3 = True, so 3 is returned.p<...<4# 1 < 2 < 3 < 4 = Truep<...<0# 1 < 2 < 3 < 0 = Falsep=pack(3,2,1)p<...# 3 < 2 < 1 = False, so a special False-comparing object is returned....<p# 3 > 2 > 1 = True

由于python没有用于比较运算符的反转参数形式,因此条件语句的工作方式略有不同。 如果在参数包的元素上折叠比较会导致False,从而使整个 比较链,它将返回一个特殊的对象,该对象将返回False以进行进一步的比较。否则, 返回参数包的最后一个元素,以便比较链可以继续。

运行测试

要在系统的python解释器中运行此模块的测试,只需从 存储库根目录。

要在所有受支持的解释器中运行测试,首先确保每个受支持的python解释器都安装在 系统并添加到环境变量中。然后从存储库根目录运行pip install -e .[dev]到 安装开发依赖项,然后从存储库根目录运行tox以运行测试。

错误报告和功能请求

请使用issue tracker提交错误或请求功能。

许可证

版权所有Joe Lawson,2017年。

这个包是根据MIT许可证的条款分发的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在另一个带有图标的JLanel的中心插入JLabel   java Spring 4会话管理   java在反汇编后返回null和空列表   java谷歌地图API有什么问题?   java rest api PUT方法不使用GET方法获取的数据   java如何在Hibernate中初始化集合集合   java自定义类加载器:有些类不是由我的类加载器加载的   java如何解决我的代码中的空指针异常?   在Windows和Linux操作系统下访问Java应用程序中的外部文件   具有多个参数的java接口   搜索在Java中搜索嵌套对象的逻辑是什么?   cpu的java矩阵访问与乘法优化   Java反射/BeanUtils问题   elasticsearch将源代码添加到BoolQueryBuilder Java   java将JS数组从Servlet传递到jQuery   如何在整个java类中使用变量