【问题标题】:Is there a scope analyzer for Python?是否有适用于 Python 的范围分析器?
【发布时间】:2015-08-15 18:25:01
【问题描述】:

给定一个 python 文件,我想找出文件中标识符的所有作用域和声明。

例如,给定这个文件:

import a
from b import xyz

def my_func(g):
   print "2"

my_func(0)
a.function_in_a(3)
xyz(4)

我希望输出是:

  • 在第 7 行,my_func 指的是在此文件第 4 行中定义的 my_func
  • 在第 8 行,a 指的是模块 a。 function_in_a 指的是模块a中定义的函数
  • 第9行,xyz指的是模块b中定义的函数

有没有图书馆可以为我做这件事?基本上我试图在IDE功能/代码自动完成/理解变量范围的上下文中使用。基本上,我有兴趣了解标识符(变量、函数等)定义的位置,就像 PyCharm 之类的 IDE 如何确定它一样。

【问题讨论】:

  • 只有 Python 定义(名称绑定)中没有声明。如果名称不指代对象;它是 NameError/UnboundLocalError。看看绝地,绳索库,尽管 Python 过于动态,无法在所有情况下得到答案。
  • 像 flake8 这样的包可以解决这个问题;在较低级别,您可以使用 AST。

标签: python lexical-analysis lexical-scope python-jedi


【解决方案1】:

奇怪的是我以前没见过这个问题。

jedi.names,几乎可以满足您的需求!

https://jedi.readthedocs.io/en/latest/docs/api.html#jedi.names

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多