gpt4 book ai didi

python - 在 python 语法库中添加新功能

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:44 25 4
gpt4 key购买 nike

我想在 python 中添加一个新功能,纯粹出于实验目的,我想扩展装饰器语法。目前装饰器可以应用于函数和类。我还想在循环(例如 for 循环)和代码块上使用装饰器。

示例 1:

    @foo
for i in range(20):
# do something
# and something more

示例 2:

    @foo
# there's a block starting from an indent here.
# there's some code now
# do something
# and something more

虽然这是基本思路,但我的要求是修 retrofit 饰器的主体。例如,我想根据应用于它的装饰器稍微改变一下循环。我可以为此使用 AST 模块。

问题是我不想完全添加新语法及其完整实现。我只想用新语法解析,访问解析树和装饰器的主体,对其进行操作并将其插入程序主体,删除装饰器,从而将具有新语法的程序更改为 python 具有的语法现在。

关于我将如何着手做这件事有什么想法吗?

最佳答案

如果不添加新语法,就无法做到这一点。装饰器本身没有这样的“主体”。装饰器可以应用于函数或类,仅此而已。查看 http://docs.python.org/2/reference/grammar.html 顶部附近:

decorated: decorators (classdef | funcdef)

如果你想要别的东西,它不能是装饰器,它必须是你自己的看起来像装饰器的语法。

您可以编写某种预处理器来解析您的语法并将其转换为有效的 Python。一种可能性是 parser module .它具有解析基本 Python 元素的工具,如套件(即 block )。您可以在文档中看到一个简单的示例。 ast 模块也提供了这个功能。但是这些模块没有提供独立于类/函数定义来解析装饰器的方法;装饰器本质上被视为类/函数定义的一部分。

即使您设法解析了您的特定构造,您也可能不得不做大量的技巧来创建 AST。问题是你不能只是“访问解析树”和“修改 AST”,因为你编写的程序不会有正常的 Python 解析树,因为它不能被解析为有效的 Python。因此,您必须尝试通过将自定义代码与普通的 Python 解析代码拼接在一起来拼接自己的 AST。

关于python - 在 python 语法库中添加新功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19874166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com