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 ajax请求不允许POST请求   java引用Android应用程序中其他模块的通用模块   JavaSpringBootWebFluxFlatmap是链接http调用的正确方法吗?   java如何在底部工作表中设置折叠工具栏?   任务“:compileJava”的java执行失败。“>无效的源版本:1.7   java Rabbit MQ不刷新ACK?   JavaWebSphere7:METAINF/config/ibmaxis2。无法正确加载xml Axis2全局配置文件   在Java中找出字符串是否包含数组中的值   java Liquibase通过Springboot执行postgres方法   java在Eclipse中安装Maven而不使用插件   Swing应用程序中的java SMTP错误   web应用程序InvalidKeyException:Java中使用RSA密钥的密钥格式无效   java显示JFrame作为JButton单击的结果?   java如何保留Apache Camel Exchange的属性,如果消息是从RabbitMQ生成和使用的   java使用流提取哈希映射列表中的所有对象   Android应用程序中的java单词检查器