zoukankan      html  css  js  c++  java
  • python如何获取变量的变量名

    假设现在存在一个值为1变量名为a的变量,如何通过一个函数获取该变量的变量名a?

    上面这个需求来源于某群友的一个要求,希望能有一个这样的函数来方便打印。

    这个需求很扯淡啊,为什么不用格式化输出?它回复到‘懒’,好吧,懒确实是程序员技术进步的第一推动力。

    从变量名获取变量值

    当时第一个想法,从变量获取变量名是相当麻烦的事情,老哥你就用用变量名吧。

    def print_var(x:str)->None:
        print(s,"=",eval(s))
    

    粗暴简单的eval,完美解决你的困难。

    内心小剧场:安全不安全管我何事

    使用locals

    毫无疑问,这样的方法遭受到群里老哥的拒绝,要多打两个引号,老哥,你也太懒了吧。

    虽然python作为一门动态语言,是肯定有反射这个功能的,但是想从变量获取变量名还是很麻烦的。

    def get_variable_name(x)->str:
        for k,v in locals().items():
            if v is x:
                return k
    def print_var(x)->None:
        print(get_variable_name(x),'=',x)
    

    当然上述代码还是有一些小bug的,比如下面的代码,但是无伤大雅,

    a = 1
    b = 1
    print_var(a)
    print_var(b)
    

    带着一些小小的得意,另一个群友发来了这样一张回答

    气氛瞬间凝固了

    另一种通过变量名获取变量值的方法

    来源于别人提供的知乎回答

    import sys
    
    def append(list_, name):
        list_.append((name, sys._getframe().f_back.f_locals[name]))
    
    >>> mylist = []
    >>> myvar = 12
    >>> append(mylist, 'myvar')
    >>> mylist
    [('myvar', 12)]
    

    回答可以作为参考,其中还提供了inspect+re来获取的方法,在这就不赘述了,以免教坏别人。

  • 相关阅读:
    切割窗口url
    软键盘弹出底部被顶上去
    C语言字符串处理标准库函数的源码(转)
    slapd配置文件详述
    OPENLDAP安装配置方法
    const成员函数
    OPENLDAP概述
    当前比较有名的Xml数据库
    『转』使用 Scalable Vector Graphics 为 ASP.NET 构建基于 XML 的灵活、轻量的图像
    SqlCommand_ExecuteNonQuery 方法返回值为1的解释
  • 原文地址:https://www.cnblogs.com/lynsyklate/p/8069283.html
Copyright © 2011-2022 走看看