Python的中缀运算符
项目描述
=====
Infix
=====
.. image:: http://img.shields.io/pypi/v/infix.svg
:target: https://pypi.python.org/pypi/infix/
:alt: 最新PyPI版本
.. image:: https://travis-ci.org/borntyping/python-infix.svg
:target: https://travis-ci.org/borntyping/python-infix
:alt: Travis构建状态
一个允许函数用作中缀函数的装饰器。
中缀运算符就是这样创建和应用的,并且不会阻止函数正常调用:
>>> from infix import shift_infix as infix
...
>>> @infix
... def plus(a, b)
... return a + b
...
>>> print(40 <<plus>> 2)
42
>>> print(plus(5, 5))
10
变体语法
----------------
“infix”模块提供了多个中缀语法:
>>> @and_infix
... def is_before(a, b)
... return a < b
...
>>> print(1 &is_before& 5)
True
>>> @or_infix
... def minus(a, b)
... return a - b
...
>>> print(1 |minus| 2)
-1
>>> @xor_infix
... def until(start, stop)
... return range(start, stop)
...
>>> print(list(1 ^until^ 10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> @pow_infix
... def pow(a, b)
... return a**b
...
>>> print(3 **pow** 2)
9
>>> dpow = div_infix(pow)
>>> print(3 /dpow/ 2)
9
自定义语法
----------------
Python有一组庞大的运算符,可以重写以提供中缀语法,因此“make_infix”函数提供了一种选择,而不是提供所有这些。要使用它,传递您希望支持的运算符名称:
>>> @make_infix('mod','pow','rshift')
... def until(start, stop)
... return list(range(start, stop))
>> print(1 %直到% 3)
[1, 2]
>> print(2 <<直到>> 4)
[2, 3]
>> print(5 **直到** 8)
[5, 6, 7]
>> print(直到(10,12))
[10, 11]
.. 新增于:: 1.2
旧的 ``custom_infix`` 仍然支持。它接受两个参数,左右操作符函数的名称,尽管只有第一个是重要的:
>> @custom_infix('__rmod__', '__mod__')
... def ate(a, b)
... return (a == 7 and b == 9)
...
>> print(7 %ate% 9)
True
>> print(6 %ate% 7)
False
左函数应该是 `右操作数`__,而右函数应该是 `左操作数 `__。
你应该小心避免使用你的函数将接受的对象可能提供自己的操作数(因为初始的右操作数仅在先前对象没有提供该操作数时才会被调用)。
绑定
-------
该库现在使用绑定功能在处理过程中间生成一个临时对象。这意味着半表达式现在可以工作了:
>> 3**pow
.. 新增于:: 1.2
示例:柯里化
-----------------
一个可能的用途是在Python中的柯里化函数。你可以轻松定义一个柯里化函数:
柯里化函数:
>> from functools import partial
>> curry = or_infix(partial)
>> def volume(x, y, z)
... return x * y * z
>> tot = volume |curry| 2 |curry| 3 |curry| 4
>> tot()
24
兼容性
-------------
适用于所有主要Python版本(2.6,2.7,3.2,3.3,3.4)。
测试
-----
此README文件中的测试是通过`doctest`_运行的。要运行测试,请运行 ''python infix.py'' - 或者使用`tox`_在所有兼容的Python版本上运行测试。
.. _doctest: https://docs.pythonlang.cn/3/library/doctest.html
.. _tox: http://testrun.org/tox/
许可
-------
版权所有 (C) 2013 Sam Clements
特此授予任何人免费获得本软件及其相关文档文件(“软件”)副本的权利,不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许将软件提供给他人以供其如此行事,前提是以下条件
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是基于合同、侵权或其他方式,源于、因或与软件或其使用或其他方式相关。
Infix
=====
.. image:: http://img.shields.io/pypi/v/infix.svg
:target: https://pypi.python.org/pypi/infix/
:alt: 最新PyPI版本
.. image:: https://travis-ci.org/borntyping/python-infix.svg
:target: https://travis-ci.org/borntyping/python-infix
:alt: Travis构建状态
一个允许函数用作中缀函数的装饰器。
中缀运算符就是这样创建和应用的,并且不会阻止函数正常调用:
>>> from infix import shift_infix as infix
...
>>> @infix
... def plus(a, b)
... return a + b
...
>>> print(40 <<plus>> 2)
42
>>> print(plus(5, 5))
10
变体语法
----------------
“infix”模块提供了多个中缀语法:
>>> @and_infix
... def is_before(a, b)
... return a < b
...
>>> print(1 &is_before& 5)
True
>>> @or_infix
... def minus(a, b)
... return a - b
...
>>> print(1 |minus| 2)
-1
>>> @xor_infix
... def until(start, stop)
... return range(start, stop)
...
>>> print(list(1 ^until^ 10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> @pow_infix
... def pow(a, b)
... return a**b
...
>>> print(3 **pow** 2)
9
>>> dpow = div_infix(pow)
>>> print(3 /dpow/ 2)
9
自定义语法
----------------
Python有一组庞大的运算符,可以重写以提供中缀语法,因此“make_infix”函数提供了一种选择,而不是提供所有这些。要使用它,传递您希望支持的运算符名称:
>>> @make_infix('mod','pow','rshift')
... def until(start, stop)
... return list(range(start, stop))
>> print(1 %直到% 3)
[1, 2]
>> print(2 <<直到>> 4)
[2, 3]
>> print(5 **直到** 8)
[5, 6, 7]
>> print(直到(10,12))
[10, 11]
.. 新增于:: 1.2
旧的 ``custom_infix`` 仍然支持。它接受两个参数,左右操作符函数的名称,尽管只有第一个是重要的:
>> @custom_infix('__rmod__', '__mod__')
... def ate(a, b)
... return (a == 7 and b == 9)
...
>> print(7 %ate% 9)
True
>> print(6 %ate% 7)
False
左函数应该是 `右操作数
你应该小心避免使用你的函数将接受的对象可能提供自己的操作数(因为初始的右操作数仅在先前对象没有提供该操作数时才会被调用)。
绑定
-------
该库现在使用绑定功能在处理过程中间生成一个临时对象。这意味着半表达式现在可以工作了:
>> 3**pow
.. 新增于:: 1.2
示例:柯里化
-----------------
一个可能的用途是在Python中的柯里化函数。你可以轻松定义一个柯里化函数:
柯里化函数:
>> from functools import partial
>> curry = or_infix(partial)
>> def volume(x, y, z)
... return x * y * z
>> tot = volume |curry| 2 |curry| 3 |curry| 4
>> tot()
24
兼容性
-------------
适用于所有主要Python版本(2.6,2.7,3.2,3.3,3.4)。
测试
-----
此README文件中的测试是通过`doctest`_运行的。要运行测试,请运行 ''python infix.py'' - 或者使用`tox`_在所有兼容的Python版本上运行测试。
.. _doctest: https://docs.pythonlang.cn/3/library/doctest.html
.. _tox: http://testrun.org/tox/
许可
-------
版权所有 (C) 2013 Sam Clements
特此授予任何人免费获得本软件及其相关文档文件(“软件”)副本的权利,不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许将软件提供给他人以供其如此行事,前提是以下条件
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是基于合同、侵权或其他方式,源于、因或与软件或其使用或其他方式相关。
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定要选择哪一个,请了解更多关于安装软件包的信息。
源分发
infix-1.2.tar.gz (4.8 kB 查看散列)
构建分发
infix-1.2-py3-none-any.whl (7.4 kB 查看散列值)
关闭
infix-1.2.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | a1bfdcf875bc072f41e426d0673f2e3017750743bb90cc725fffb292eb09648c |
|
MD5 | c57380f1607a273352c6116197544747 |
|
BLAKE2b-256 | 68b75cdfd5fecfa43cb96ca5a30d1a79f54015e84aa43d5d4a9a58e0ab96c7c5 |
关闭
infix-1.2-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 4bcd1fb402932e46dea7d440a280eda0e6f2510aa683b0808a39902281551649 |
|
MD5 | fc2a56abe1f269f68cb3267522151988 |
|
BLAKE2b-256 | 4b5652f97e6930954b173f1aee42ede5fda1ad91590e525828b0bf662e0d18e1 |