给出python函数:
def MyPythonMethod(value1, value2):
# defining some variables
a = 4
myValue = 15.65
listValues = [4, 67, 83, -23]
# doing some operation on the list
listValues[0] = listValues[1]
# looping through the values
for i in listValues:
print i
如何提取方法names
中所有变量的types
和MyPythonMethod
?
理想情况下,我希望获得所有变量名称及其类型的方法名称。例如,方法MyPythonMethod
的输出将如下所示:
varNames = ["a", "myValue", "listValues", "i"]
varTypes = ["int", "float", "list", "float"]
有什么想法吗?
答案 0 :(得分:7)
1变量在python中没有类型。对象具有类型,变量指向对象。
[2]您可以使用inspect module获取有关函数内部的信息。 阅读文档 - 他们会告诉您可以检查的内容。 例如,MyPythonMethod.func_code.co_varnames将为您提供本地变量名称。 (请注意,MyPythonMethod,如定义的,实际上是一个函数,而不是一个方法。)
[3]但即使你得到局部变量的名字,它也不会绑定到任何对象 除了函数正在执行。值4绑定到函数中的局部变量'a' - 在调用函数之前和之后,没有'a'并且它没有绑定到任何东西。
[4]如果在调试器中运行该函数,则可以在任何时候停止执行并检查函数中创建的变量和对象。
[5]如果函数引发异常,您可以捕获异常并在异常时访问函数的某些状态。
答案 1 :(得分:4)
你不能“从外面”这样做。
a = "foo"
,输出应该是什么?然后,如果您添加a = SomeClass()
?在方法本身内部,可以使用locals()
来获取本地变量及其当前引用的对象的字典,并且可以继续在值(对象)上调用type
。当然,这只会使您获得当前引用的对象的类型。正如评论中暗示的那样,我怀疑这是否有用。你真正想做什么,即你想解决什么问题?
答案 2 :(得分:0)
如果您使用pdb
,则无法将最后一行设置为断点,然后请求调试器查看顶部堆栈帧并为您列出变量?或者你可以查看pdb
代码并复制它的技巧,了解如何引入断点,然后检查你注册的断点函数下面的堆栈框架。