I don' Tôi nghĩ rằng bạn có thể kiểm tra đối tượng mã vì các hàm bên trong là lười và các đối tượng mã của chúng chỉ là c reated chỉ trong thời gian. Những gì bạn có thể muốn xem thay vào đó là mô-đun ast. Dưới đây là một ví dụ nhanh:
import ast, inspect
# this is the test scenario
def function1():
f1_var1 = 42
def function2():
f2_var1 = 42
f2_var2 = 42
def function3():
f3_var1 = 42
# derive source code for top-level function
src = inspect.getsource(function1)
# derive abstract syntax tree rooted at top-level function
node = ast.parse(src)
# next, ast's walk method takes all the difficulty out of tree-traversal for us
for x in ast.walk(node):
# functions have names whereas variables have ids,
# nested-classes may all use different terminology
# you'll have to look at the various node-types to
# get this part exactly right
name_or_id = getattr(x,'name', getattr(x,'id',None))
if name_or_id:
print name_or_id
Kết quả là: Function1, function2, f1_var1, function3, f2_var1, f2_var2, f3_var1. từ chối trách nhiệm bắt buộc: có lẽ không phải là một lý do chính đáng để làm kiểu này mà .. nhưng có niềm vui :)
Oh và nếu bạn chỉ muốn tên của các chức năng bên trong?
print dict([[x.name,x] for x in ast.walk(ast.parse(inspect.getsource(some_function))) if type(x).__name__=='FunctionDef'])
Đây có phải là điều một cấp hoặc bạn cũng muốn có chức năng lồng nhau không? –