如何从python文件中删除函数实现?

2024-05-15 18:37:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个班设计python作业。我定义函数,编写docstring,然后实现它们。之后,我想删除所有函数的实现,并用raise NotImplementedError替换代码(而不是文档字符串、函数名和参数)

是否有任何工具(例如IDE)可以自动为我删除所有代码,这样我就不必自己替换实现的功能?我正在考虑写一个小剧本,但我想在我写这个之前我可以在这里问一下

如果有人写过类似的东西,或者知道如何快速实现这一点,我会非常感激

下面是我想实现的一个简单示例:

test.py

def add(a,b):
"""
Adds two numbers
"""
 return a+b

def multiply(a,b):
"""
Multiplies two numbers
"""
 return a*b

应该以自动化的方式(当然对于更大的文件):

test.py

def add(a,b):
"""
Adds two numbers
"""
   raise NotImplementedEror

def multiply(a,b):
"""
Multiplies two numbers
"""
   raise NotImplementedEror

Tags: 函数代码pytestaddreturndef作业
1条回答
网友
1楼 · 发布于 2024-05-15 18:37:13

我不知道有什么工具可以专门做到这一点,但是Python通过^{}模块在其自己的标准库中提供了出色的AST操作工具。您将需要一个第三方模块将转换后的结果“解压”回常规Python代码,在快速搜索后,我发现this one似乎可以实现这一点,尽管似乎还有很多其他模块

这里有一些示例代码可以帮助您找到正确的方向。显然,您需要对此进行调整,以获得您想要的确切行为,特别是如果您想要提供类而不仅仅是顶级函数(因为我没有编写任何东西来处理该用例)。但是有了一点Python知识,应该可以实现自动化

另外,这是Python 3(从2020年开始,它是唯一受支持的Python版本)。如果您仍然使用Python 2,则可能需要进行一些修改

import ast
import astunparse

# Read our file using the built-in Python AST module.
with open('filename.py') as f:
    data = ast.parse(f.read(), 'filename.py')

# Loop through all declarations.
for decl in data.body:
    # Only modify functions
    if isinstance(decl, ast.FunctionDef):
        # The docstring is the first statement of the body. So we don't
        # want to change it. Instead, replace the rest of the body with
        # our pre-built "raise" call. Note that I figured out what "raise"
        # looked like in AST form by running
        #
        # ast.dump(ast.parse("raise NotImplementedError()"))
        #
        decl.body[1:] = [ast.Raise(ast.Call(ast.Name('NotImplementedError'), [], []), None)]

# Use astunparse to pretty print the result as Python code.
print(astunparse.unparse(data))

如果你愿意花时间去做的话,自动化是绝对可能的。如果你打算做几个作业,甚至几个学期,你可以考虑编写一个脚本。但是如果你只做一次,那么用手来做可能更值得你花时间

相关问题 更多 >