gpt4 book ai didi

python - 如何解析 python 代码以识别全局变量用途?

转载 作者:行者123 更新时间:2023-11-28 21:13:49 25 4
gpt4 key购买 nike

我正在使用 python 来解析 python 代码。假设我正在解析的代码是:

def foo():
global x, y
x = 1
y = 2
print x + y

我想在代码中找到所有使用全局变量 x 和 y 的地方。我有一个提前使用的全局变量列表,因此无需从全局变量行中提取 x 和 y。所以问题是:给定一些 python 代码中使用的已知全局变量列表,例如['x', 'y'] 在这种情况下,我如何解析代码以找到这些全局变量的用途?

最佳答案

可以使用ast来解析python代码

from __future__ import print_function
import ast

src = """def foo():
global x, y
x = y = 1
y = 2
print x + y"""


s = ast.parse(src)

gvars = set()
for i in ast.walk(s):
# get globals
if isinstance(i,ast.Global):
for j in ast.walk(i):
gvars = gvars.union(i.names)
#get id-s of globals
for (field_type,value) in ast.iter_fields(i):
if field_type == "id" and value in gvars:
print(value , "at line", i.lineno)

这个输出

x at line 3
y at line 3
y at line 4
x at line 5
y at line 5

这在范围方面仍然不能正常工作,但仍然可以在源代码中找到某个 id 的所有实例。

范围解析问题示例:

global x,y
def foo():
x = y = 1
global y
x = y = 2
# only global y is 2

def bar():
#here x and y are not global
x = y = 3

foo()
bar()
print(x,y) # runtime error. x undefined

我们希望我们的代码只产生
- 酒吧功能中的 y
- x,y 结束
但它会打印所有出现的 x,y

关于python - 如何解析 python 代码以识别全局变量用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382963/

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