“懒惰”计算支持。
lz的Python项目详细描述
lz
在接下来的内容中
python
是python3.5
或任何更高版本的别名 版本(python3.6
等),pypy
是pypy3.5
或任何更高版本的别名 版本(pypy3.6
等等)。
安装
安装最新的pip
&;setuptools
软件包版本:
- 与
CPython
python -m pip install --upgrade pip setuptools
- 用
PyPy
pypy -m pip install --upgrade pip setuptools
用户
从PyPI
存储库下载并安装最新的稳定版本:
- 与
CPython
python -m pip install --upgrade lz
- 用
PyPy
pypy -m pip install --upgrade lz
显影剂
从GitHub
存储库下载最新版本
git clone https://github.com/lycantropos/lz.git
cd lz
安装依赖项:
- 与
CPython
python -m pip install -r requirements.txt
- 用
PyPy
pypy -m pip install -r requirements.txt
安装:
- 与
CPython
python setup.py install
- 用
PyPy
pypy setup.py install
用法
lz
提供了一系列实用程序,用于处理函数、谓词和iterable,如
>>>fromlz.functionalimportcompose>>>sum_of_first_n_natural_numbers=compose(sum,range)>>>sum_of_first_n_natural_numbers(10)45
>>>fromlz.functionalimportcurry>>>curried_power=curry(pow)>>>two_to_power=curried_power(2)>>>two_to_power(10)1024
翻转位置参数顺序
>>>fromlz.functionalimportflip>>>flipped_power=flip(pow)>>>flipped_power(2,4)16
打包函数的参数
>>>fromlz.functionalimportpack>>>packed_int=pack(int)>>>packed_int(['10'])10>>>packed_int(['10'],{'base':2})2
>>>fromlzimportleft>>>count_from_zero_to=left.applier(range,0)>>>list(count_from_zero_to(10))[0,1,2,3,4,5,6,7,8,9]
>>>fromlzimportright>>>square=right.applier(pow,2)>>>square(10)100
negating谓词
>>>fromlz.logicalimportnegate>>>false_like=negate(bool)>>>false_like([])True>>>false_like([0])False
>>>fromlz.logicalimportconjoin>>>is_valid_constant_identifier=conjoin(str.isupper,str.isidentifier)>>>is_valid_constant_identifier('SECOND_SECTION')True>>>is_valid_constant_identifier('2ND_SECTION')False
>>>fromlz.logicalimportdisjoin>>>alphabetic_or_numeric=disjoin(str.isalpha,str.isnumeric)>>>alphabetic_or_numeric('Hello')True>>>alphabetic_or_numeric('42')True>>>alphabetic_or_numeric('Hello42')False
>>>fromlz.logicalimportexclusive_disjoin>>>fromkeywordimportiskeyword>>>valid_object_name=exclusive_disjoin(str.isidentifier,iskeyword)>>>valid_object_name('valid_object_name')True>>>valid_object_name('_')True>>>valid_object_name('1')False>>>valid_object_name('lambda')False
反转序列和任何字符串流
>>>fromlz.reversalimportreverse>>>list(reverse(range(10)))[9,8,7,6,5,4,3,2,1,0]>>>importio>>>list(reverse(io.BytesIO(b'Hello\nWorld!')))[b'World!',b'Hello\n']
可分块
>>>fromlz.iteratingimportchopper>>>to_triplets=chopper(3)>>>list(map(tuple,to_triplets(range(10))))[(0,1,2),(3,4,5),(6,7,8),(9,)]
滑过Iterable
>>>fromlz.iteratingimportslider>>>slide_pairwise=slider(2)>>>list(slide_pairwise(range(10)))[(0,1),(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8),(8,9)]
interleaving可伸缩性
>>>fromlz.iteratingimportinterleave>>>list(interleave([range(10),range(10,20)]))[0,10,1,11,2,12,3,13,4,14,5,15,6,16,7,17,8,18,9,19]
>>>fromlz.transpositionimporttranspose>>>list(map(tuple,transpose(zip(range(10),range(10,20)))))[(0,1,2,3,4,5,6,7,8,9),(10,11,12,13,14,15,16,17,18,19)]
可重复性
>>>fromlz.replicationimportduplicate>>>list(map(tuple,duplicate(range(10))))[(0,1,2,3,4,5,6,7,8,9),(0,1,2,3,4,5,6,7,8,9)]
以及many more。
开发
建筑文档
在可编辑模式下安装项目
- 与
CPython
python -m pip install -e .
- 用
PyPy
pypy -m pip install -e .
安装文档要求
- 与
CPython
python -m pip install -r docs/requirements.txt
- 用
PyPy
pypy -m pip install -r docs/requirements.txt
生成文档
cd docs
make html
碰撞版本
准备工作
安装 bump2version。
预发布
选择要在semver specification之后凹凸的版本号类别。
测试碰撞版本
bump2version --dry-run --verbose $CATEGORY
其中$CATEGORY
是目标版本号类别名称,可能
值是patch
/minor
/major
。
凹凸版本
bump2version --verbose $CATEGORY
这将把version设置为major.minor.patch-alpha
。
释放
测试碰撞版本
bump2version --dry-run --verbose release
凹凸版本
bump2version --verbose release
这将把version设置为major.minor.patch
。
运行测试
安装依赖项:
- 与
CPython
python -m pip install -r requirements-tests.txt
- 用
PyPy
pypy -m pip install -r requirements-tests.txt
普通
pytest
在Docker
容器内:
- 与
CPython
docker-compose --file docker-compose.cpython.yml up
- 用
PyPy
docker-compose --file docker-compose.pypy.yml up
Bash
脚本(例如,可用于Git
挂钩):
用
CPython
./run-tests.sh
或
./run-tests.sh cpython
用
PyPy
./run-tests.sh pypy
PowerShell
脚本(例如,可用于Git
挂钩):
- 与
CPython
.\run-tests.ps1
或.\run-tests.ps1cpython
- 用
PyPy
.\run-tests.ps1pypy