def extract_return(file, fname):
for x in ast.walk(ast.parse(open(file).read())):
if not(isinstance(x, ast.FunctionDef)):
if not(x.name == fname):
for b in x.body:
if isinstance(b, ast.Return):
if isinstance(b.value, ast.Name):
This defines a function which takes some python source's filename and a function name
fname (your "
x") and yields each identifier returned by function
fname. Here, I assume that you are only interested in
return statements that occur at the first level of function
x and consequently, I don't visit subexpressions. Also, I'am using
yield because in more general cases this could work like a filter which could be composed with other ones. In more complex cases, it can be preferable to subclass
This is equivalent in size with the regex approach but far more reliable.