当前位置: 首页 > 面试题库 >

如何在运行时在python中检索变量的名称?

董权
2023-03-14
问题内容

有没有办法在运行时(从代码中)知道变量的名称?还是在编译过程中忘记了变量的名称(是否使用字节码)?

例如:

>>>变量= 15
>>>打印变量~~名称~~()
'vari'

注意 :我说的是普通数据类型的变量(intstrlist等)


问题答案:

这里是一个基本的(也许很奇怪)函数,它显示了参数的名称…这个想法是分析代码并搜索对该函数的调用(在 init
方法中添加它可以帮助找到实例名称,尽管带有一个更复杂的代码分析)

def display(var):
    import inspect, re
    callingframe = inspect.currentframe().f_back
    cntext = "".join(inspect.getframeinfo(callingframe, 5)[3]) #gets 5 lines
    m = re.search("display\s+\(\s+(\w+)\s+\)", cntext, re.MULTILINE)
    print m.group(1), type(var), var

请注意:如下面的示例所示,从调用代码中获取多行内容有助于防止拆分呼叫:

display(
        my_var
       )

但这会产生意外结果:

display(first_var)
display(second_var)

如果您无法控制项目的格式,则仍然可以改进代码以检测和管理不同的情况…

总的来说,我猜想静态代码分析可能会产生更可靠的结果,但是我现在懒得检查它



 类似资料:
  • 问题内容: 我几乎没有这样声明的C函数 我想将这些作为一个Go函数公开 所以我需要能够在运行时检查 参数 类型。我该怎么做,这是个好主意吗(如果不是,在这种情况下,什么是好的做法)? 问题答案: 在此处查看类型断言: http://golang.org/ref/spec#Type_assertions 我只断言一个明智的类型(字符串,uint64)等,并使其尽可能宽松,最后执行到本机类型的转换。

  • 问题内容: 假设我有一个名为choice它的变量等于2。我将如何访问该变量的名称?相当于 用于制作字典。有一个很好的方法可以做到这一点,而我只是想念它。 编辑: 因此,这样做的原因是。我正在运行一些数据分析的东西,我在运行时使用多个我想调整或不调整的参数来调用程序。我从格式为.config的文件中读取了上次运行中使用的参数 当提示你输入值时,将显示先前使用的值,并且空字符串输入将使用先前使用的值。

  • 问题内容: 更新(2020年9月) :Python 3.9包含此用例的功能,请参阅https://docs.python.org/3.9/library/typing.html#typing.get_type_hints 我正在尝试编写一个使用Python 3.6类型提示的函数装饰器,以检查参数字典是否尊重类型提示,并且如果未出现带有问题清晰说明的错误,则将其用于HTTP API。 问题是,当函数

  • 我试图编写一个函数装饰器,它使用Python 3.6类型提示来检查参数字典是否尊重类型提示,如果没有清晰描述问题,则会产生错误,用于HTTP API。 问题是,当函数有一个使用类型的参数时,我无法在运行时对照它检查变量。 比如我有这个功能 我可以做到: 但不是: 因为不能与或一起使用。 我找不到使用type对象检查它的方法。我试图自己实现检查,但当显示为我不能在运行时访问类型列表,如果不使用检查。

  • 在阅读(https://docs.camunda.org/manual/7.5/user-guide/process-engine/variables/)时,我不知道如何检索变量? 目前,我正在努力找出如何访问以前设置的过程变量。我尝试的是: 我有一个简单的bpmn流程,其中有start事件、1个服务任务和end事件,我通过传递2个变量(a&B)来启动我的流程,我的服务任务实现如下java类: 有

  • 问题内容: 有没有一种方法可以在python循环中生成变量名并为其分配值?例如,如果我有 我想要 我可以在一个循环或某事做,而不是手动分配,等等。 编辑 许多人建议我写一个要求这样做的理由。首先,有些时候我认为这可能比使用列表更方便…我不记得确切的时间,但是我想我想过在有很多嵌套级别时使用它。例如,如果具有列表列表的列表,则以上述方式定义变量可能有助于降低嵌套级别。第二,今天我在尝试学习使用Pyt