擅长:python、mysql、java
<p>嗨,我知道很晚了,但我想这就是你要找的,
我只对模块中的函数定义进行解析。
通过这种方法可以得到ast节点的第一行和最后一行。这样,函数定义的源代码行可以通过只读取我们需要的行来解析源文件来获得。
这是一个非常简单的例子</p>
<pre><code>st='def foo():\n print "hello" \n\ndef bla():\n a = 1\n b = 2\n
c= a+b\n print c'
import ast
tree = ast.parse(st)
for function in tree.body:
if isinstance(function,ast.FunctionDef):
# Just in case if there are loops in the definition
lastBody = func.body[-1]
while isinstance (lastBody,(ast.For,ast.While,ast.If)):
lastBody = lastBody.Body[-1]
lastLine = lastBody.lineno
print "Name of the function is ",function.name
print "firstLine of the function is ",function.lineno
print "LastLine of the function is ",lastLine
print "the source lines are "
if isinstance(st,str):
st = st.split("\n")
for i , line in enumerate(st,1):
if i in range(function.lineno,lastLine+1):
print line
</code></pre>