python代码对象转换器

codetransformer的Python项目详细描述


示例使用

重载文字

虽然这可以作为ast转换来完成,但我们通常需要执行 文本的构造函数多次。同时,我们需要确定 运行代码所需的任何其他名称都会在运行时提供。用 代码转换器 ,我们可以预先计算新的文本并发出 加载未经修改的文本而不需要任何额外的 名称是隐式可用的。

在下面的代码块中,我们演示了重载字典语法以导致 集合.ordereddict 对象。 ordereddict 类似于a dict ; 但是,键的顺序将被保留。

>>>fromcodetransformer.transformers.literalsimportordereddict_literals>>>@ordereddict_literals...deff():...return{'a':1,'b':2,'c':3}>>>f()OrderedDict([('a',1),('b',2),('c',3)])

这也支持字典理解:

>>>@ordereddict_literals...deff():...return{k:vfork,vinzip('abc',(1,2,3))}>>>f()OrderedDict([('a',1),('b',2),('c',3)])

下一个块用decimal.decimal覆盖 浮点 文本 物体。这些对象支持任意精度算法。

>>>fromcodetransformer.transformers.literalsimportdecimal_literals>>>@decimal_literals...deff():...return1.5>>>f()Decimal('1.5')

模式匹配异常

模式匹配异常是代码转换器的一个很好的例子 在ast级别实现起来会非常复杂。这种转变 扩展了try/except语法以接受baseexception的实例 基本异常的子类。除实例外, 参数 将比较异常的相等性以确定哪个异常 应调用处理程序。例如:

>>>@pattern_matched_exceptions()...deffoo():...try:...raiseValueError('bar')...exceptValueError('buzz'):...return'buzz'...exceptValueError('bar'):...return'bar'>>>foo()'bar'

此函数引发 valueerror 的实例并尝试捕获它。这个 第一个检查查找用 'buzz' 的参数。因为我们的自定义异常是用 'bar' 引发的, 这些不相等,我们不输入此处理程序。下一个处理程序查找 valueerror('bar') 与我们引发的异常匹配。然后我们进入 此块和普通的python规则将接管。

我们还可以传递他们自己的异常匹配函数:

>>>defmatch_greater(match_expr,exc_type,exc_value,exc_traceback):...returnmath_expr>exc_value.args[0]>>>@pattern_matched_exceptions(match_greater)...deffoo():...try:...raiseValueError(5)...except4:...return4...except5:...return5...except6:...return6>>>foo()6

当匹配表达式在价值大于第一 引发的任何异常类型的参数。这种特殊的行为 很难通过ast级别的转换进行模拟。

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

推荐PyPI第三方库


热门话题
java为游戏添加声音。需要帮助   java在获取数据时忽略模型类中的forign键映射   java为什么Microsoft JDBC驱动程序忽略failoverPartner主机名   java可以下载mozswing文件   java等价于ObjectOutputStream,不仅保存其状态,还保存整个对象?   Java Android LiveData根据其他LiveData调用房间查询   java如何使用jackson jsonNode实现这一点并获得所需的输出   在web服务器上作为web应用程序运行java应用程序?   groovy中java类的元类属性   返回空指针的java图形对象   标头中包含用户名和密码的java SOAP客户端请求   具有堆栈实现和递归的Hanoi算法塔(Java)   java当我运行这两个类时,我的老鼠不会移动   使用图像进行java相似图像搜索   Java8并行流机制   使用单例对象作为枚举元素的java Scala枚举,是否有可能对它们进行迭代?   java Webview更改高度大小   不可序列化对象和函数的java Spark Scala编程   java my app在eclipse中运行良好,而不是在jar中