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级别的转换进行模拟。