decorator以命令语法创建和更新不可变值。

pyrsistent-mutable的Python项目详细描述


概述

pyresistent mutable包提供了一个decorator,该decorator将一个修饰函数转换为使用 pyrsistentapi。

这意味着将转换一组特定操作:

  • 文本sets、dicts和lists的构造转换为对pset、^{tt5}的调用$ 和pmap
  • 重新编写作业以处理:
    • 对属性的赋值变成演化调用;嵌套被正确处理。
    • 扩充的赋值被转换成常规赋值。
  • 独立方法调用转换为赋值。
frompyrsistent_mutableimportpyrmutefrompyrsistentimportPRecord,fieldclassSimple(PRecord):attr=field()other=field()@pyrmutedefexample_func():# Built in referential integritysave_vector=my_vector=[0,1,2,3,4]# Mapped to a pvectordelmy_vector[3]# Does *not* change save_vector# Evolve nested attributesmy_precord=Simple(attr=Simple(),other=[])my_precord.attr.attr=5my_precord.other.append(20)# Transforms literals and comprehensionsmy_maps=[{'filling':key}forkeyin('apple','banana')]my_maps[0]['crust']='flaky'returnmy_vector,save_vector,my_precord,my_maps

此示例在tests/test_readme.py中进行测试。

有什么意义?

这完全是因为命令式表单更容易阅读,而Pyristent的API对于嵌套的集合来说是乏味的, 至少与本机python语法相比。

另外,我正在研究一种更广泛地使用这种技术的语言,所以这是一个将 原型变成更普遍有用的东西。

安装

安装应该是:

# Install via pip, preferred.
pip3 install pyrsistent-mutable

# Install traditionally.
python3 setup.py install

使用量

除上述示例外,使用此模块时需要记住的主要事项:

  • 函数仍然需要返回值。
  • 一份“拷贝”可以通过简单的分配来完成。
  • 列表、听写和集合文字和理解被转换。
  • 元组是not转换的,生成器也是。
  • 如果方法调用是独立表达式,则只对它们进行转换。
  • 重写的操作对于非<pyresistent值应该回到正常行为。
  • 修饰函数不能允许nonlocal名称。
  • global可能无法工作。

故障排除

这真的只是尝试一个原型,并做一些有用的东西。

如果一个函数没有以一种有用的方式调用某个函数,那么罪魁祸首可能是我在 pyrsistent_mutable.globals

别忘了return

这只会咀嚼赋值和表达式语句。

阅读__source__

转换后的代码被写入__source__下的函数中,这可能有助于调试。

已知限值

其中大多数是因为我只做了非常初步的工作,将命令操作映射到持久值。

  • 片的分配使用evolver框架,它不处理复杂的片。
  • 同样地,删除切片也不起作用。
  • 增广赋值通常要求RHS上有一个Pyristent值。
    • 现在模块翻译了文本,这就减轻了。
  • 它不在异步函数或生成器上测试。不过,它不应该关心他们。
  • 要么全是,要么什么都不是。
  • 顶级函数不能有nonlocal名称。不过,嵌入式函数可以。

调试

默认情况下,decorator将把转换后的源代码作为__source__写入函数。我刚取了那个名字 把帽子拿出来。您可以用write_source=False调用decorator来禁用此功能。

软件包维护人员注意事项

pip install twine
python setup.py bdist_wheel
twine upload dist/pyrsistent_mutable-0.0.x-py3-none-any.whl

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

推荐PyPI第三方库


热门话题
编译器构造为什么在Java中允许初始化对Null的引用?   java手动调用javax的actionPerformed。摆动计时器   使用git分支的java Maven版本控制   Java8句子流   java JPA OneToOne和OneToMany实体实例化/创建   java如何将值添加到列表<Map<String,Object>>?   java如何使用ComboBox在一个框架内更改JPanel。getSelectedIndex()   java在比较XML和xmlunit时忽略文本差异   java无法从其他pc连接到本地主机   Java中分配对象id的优雅方式   Java中静态变量的使用   java试图从Neteller获取OAuth访问令牌时产生错误:“服务器返回HTTP响应代码:401表示URL”   Java:基元类型是否会影响性能?   java可以让hasNext()不区分大小写吗?   基于AutoCompleteTextView建议属性或AutoCompleteTextView值的java Android搜索   java流文件到firefox浏览器有时无法打开应用程序对话框   在没有ArrayList的Java中返回数组中的搜索结果   复制java。木卫一。IOException:数据错误(CRC)   java为什么我在尝试删除Facebook测试用户时会出现“方法未实现”错误   java如何使用JNA调用SetProcessReliationPolicy