我想在我编写的所有python代码中计算变量名的唯一性。为此,我需要删除所有关键字和保留字(已知),注释和字符串。例如,以下代码:
''' long comment '''
for x in range(y, y+foo):
print "Hello", 'world', '''lookout for the # tricky nest''', q # comment
应该被剥离到for, x, in, range, y, foo, print, q
的标记,可以使用一组已知的关键字对其进行进一步解析。这可能是使用python引擎本身(可能与ast module)?
答案 0 :(得分:1)
这是我第一次使用ast
模块,但收集源中引用的所有对象名称相对容易:
import ast
class Visit(ast.NodeVisitor):
def __init__(self):
ast.NodeVisitor.__init__(self)
self.s = set()
def visit_Name(self,node):
self.s.add(node.id)
with open('x.py') as f:
a=ast.parse(f.read())
v = Visit()
v.visit(a)
print v.s
x.py
的位置:
''' long comment '''
q=7
y=0
foo=10
for x in range(y,y+foo):
print "Hello", 'world', '''lookout for the # tricky nest''', q # comment
输出:
set(['q', 'y', 'range', 'foo', 'x'])
请注意,关键字尚未包含在内,但确实会选择功能名称range
。
答案 1 :(得分:0)
如果您更关心获取变量列表而不是如何删除所有字符串,注释等,您可以尝试以下方法:
for name in (set(locals()) | set(globals())):
print(name)
打印显示在本地词典或全局词典中的任何内容。使用dir(myobject)
获取myobject
的变量。