- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在 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/
为了方便大家管理系列博文,今天发布一个预览版新功能——合集。 您可以在博客后台 合集 栏目中创建新合集 或者在编辑博文时快捷地创建新合集 然后可以在编辑时将博文与合集关
我正在尝试实现 AirDrop我的 iOS 应用程序中的功能。但是,我无法找到有关此功能的任何特定教程或资源。有人可以向我提供有关 AirDrop 实现的示例或链接吗? iOS 7 中的功能? 非常感
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
是否需要重写 equals() 方法来在 Switch 案例中使用 String 数据类型 最佳答案 您不仅不需要这样做,而且根本无法这样做(String 是 final)。 关于Java 7 新功能
我有一些关于 DB2 NF 模式的客户问题。谷歌对此知之甚少。 我已经能够 推断 以下,但我并不完全相信它...... NF 和 CM(兼容模式)是大型机上 DB2 v8 上的设置。 CM 中 z/O
Market 添加了设备兼容性检查。现在我们可以检查应用程序是否适用于特定设备,例如 HTC 手机、三星 Galaxy 等。 开发者方面如何:我们如何才能只为特定设备构建应用程序或限制只为平板电脑开发
fastlane supply android元数据具有以下结构: └── fastlane └── metadata └── android ├──
所以我的理解是,当对象的最后一个剩余所有者被销毁或重新分配时,shared_ptr 会自动从内存中释放,(看起来好得令人难以置信?)并且当许多实例可能共享同一个对象时它很有用。正确吗? 所以在我的例子
这个问题在这里已经有了答案: Backticks (`…`) calling a function in JavaScript (3 个答案) 关闭 6 年前。 遇到过这个例子,完全迷路了... c
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 4年前关闭。 Improve t
我是 Laravel 5 的新手。我目前正在做一个带有 CRUD 功能的任务项目。我做了删除功能,但是update和add还是乱七八糟的。请帮助我。 我的数据库只有 1 个表,'tasks' 有 3
根据 Sass 3.3 发行说明,以下代码应该可以工作。 @mixin element($name) { @at-root #{&}__#{$name} { @cont
我们如何监听“http.Server”事件?或者我们如何实例化一个“http.Server”对象? 根据nodejs.org/api.html: “http.Server”是一个 EventEmitt
我正在开发一个 React 应用程序,该应用程序从 Rails api 提供数据。我目前正在开发一个包含嵌套关联的表单(即 model_a 中有许多 model_b,您可以以相同的表单创建它们)。 我
在我的应用程序中,我想使用 iOS 7 的新功能:静默远程通知。另外,还要保证在iOS 6下能正常安装运行。这两个场景会不会冲突? 我试过这个: #ifdef IOS7_OR_LATER - (voi
我是 Apple 平台的新手,我从 xcode 7 和 swift 开始。我想为最新版本的 iOS (9.0) 创建应用程序,但支持 2 个旧版本,如 8 和 7。 基础 SDK:最新 (iOS 9.
在我的Redis缓存中,我已经运行 SET 12345 JoeDude SET JoeDude "It works!!" 我有一个Lua脚本,打算从终端运行: lua local user=redis
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我正在redis中编写一个lua脚本,并在 Spring 执行它,内容很简单 local store = redis.call('hget',KEYS[1],'capacity') print(s
“选择调试应用程序”和“等待调试器”是果冻 bean 的新功能,有人知道如何使用这些新功能吗? 最佳答案 我在这里找到了答案:http://developer.android.com/tools/de
我是一名优秀的程序员,十分优秀!