gpt4 book ai didi

python - 比较 Python 代码的等价性

转载 作者:太空狗 更新时间:2023-10-29 19:34:16 25 4
gpt4 key购买 nike

是否有一种可靠、自动的方法(例如命令行实用程序)来检查两个 Python 文件是否等效模空格、分号、反斜杠延续、注释等?换句话说,它们与解释器相同?

例如,这个:

import sys
sys.stdout.write('foo\n')
sys.stdout.write('bar\n')

应该被认为等同于此:

import   sys
sys.stdout.\
write('foo\n'); sys.stdout.\
write(

'bar\n') # This is an unnecessary comment

最佳答案

使用 ast模块。

示例(对于 Python 2):

import ast

x = r'''import sys
sys.stdout.write('foo\n')
sys.stdout.write('bar\n')'''

y = r'''import sys
sys.stdout.\
write('foo\n'); sys.stdout.\
write(

'bar\n') # This is an unnecessary comment'''

xd = ast.dump(ast.parse(x))
yd = ast.dump(ast.parse(y))
print xd == yd

您当然可以从实际文件而不是字符串文字中读取源代码。

编辑:

为了让评论有意义,我想指出我最初建议使用内置的 compile()功能。然而,@Jian 发现了一个简单的案例,它并没有很好地处理。正如@DSM 所建议的那样,也许可以对其进行调整,但随后解决方案变得不那么整洁了。也许这不是不合理的,但如果 ast 解析和转储同样有效或更好,那么这是更直接的方法。

关于python - 比较 Python 代码的等价性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278864/

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