Les*_*ack 3 python function introspection inspect higher-order-functions
假设我有以下功能:
def eggs(a,b,c):
if c.foo:
return a + b.bar
else:
return c.spam
Run Code Online (Sandbox Code Playgroud)
我想有能够自省通过功能的高阶函数和获取参数的成员通过点语法的代码里面提到的什么,有以下行为:
>>> member_inspector(eggs, 'c')
('foo','spam')
>>> member_inspector(eggs, 'b')
('bar')
>>> member_inspector(eggs, 'a')
()
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?怎么样?
这是一个基本版本:
import inspect
from textwrap import dedent
import ast
def member_inspector(f, var):
source = dedent(inspect.getsource(f))
module = ast.parse(source)
func = module.body[0]
result = []
for stmt in func.body:
for node in ast.walk(stmt):
if (isinstance(node, ast.Attribute) and
isinstance(node.value, ast.Name) and
node.value.id == var):
result.append(node.attr)
return result
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
52 次 |
最近记录: |