假设现在存在一个值为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来获取的方法,在这就不赘述了,以免教坏别人。

python如何获取变量的变量名的更多相关文章

  1. 【Python】—— 获取函数内部变量名称

    原文出处: https://blog.csdn.net/maixiaochai/article/details/88693507 关键语句: func_vars = func.__code__.co_ ...

  2. python MySQL 获取全部数据库(DATABASE)名、表(TABLE)名

    import MySQLdb #connect try: conn = MySQLdb.connect( host = "localhost", user = "root ...

  3. python 动态生成变量名以及动态获取变量的变量名

    前言需求: 必须现在需要动态创建16个list,每个list的名字不一样,但是是有规律可循,比如第一个list的名字叫: arriage_list_0=[],第二个叫arriage_list_1=[] ...

  4. JavaScript使用构造函数获取变量的类型名

    在JavaScript中,如何准确获取变量的类型名是一个经常使用的问题. 但是常常不能获取到变量的精确名称,或者必须使用jQuery 中的方法,这里 我通过 typeof ,jQuery.type 和 ...

  5. 二、Python基础(input、变量名、条件语句、循环语句、注释)

    一.input用法 input在Python中的含义为永远等待,直到用户输入了值,从而将所输入的值赋值另外的一个东西. n=input('请输入......') 接下来用一个例子学习input的用法 ...

  6. (八)python的简单数据类型和变量

    什么是数据类型? 程序的本质就是驱使计算机去处理各种状态的变化,这些状态分为很多种. 例如英雄联盟游戏,一个人物角色有名字,钱,等级,装备等特性,大家第一时间会想到这么表示 名字:德玛西亚------ ...

  7. python 动态获取当前运行的类名和函数名的方法

    一.使用内置方法和修饰器方法获取类名.函数名 python中获取函数名的情况分为内部.外部,从外部的情况好获取,使用指向函数的对象,然后用__name__属性 复制代码代码如下: def a():pa ...

  8. [ python ] 全局和局部作用域变量的引用

    全局与局部变量的引用 (a)locals(b)globals 这里还需要在补充2个关键字一起比较学习,关键字:(c)nonlocal(d)global locals 和 globals locals: ...

  9. Python 3 学习笔记之——变量作用域、模块和包

    1. 变量作用域 Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的.变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称.Python 的作用域一共 ...

随机推荐

  1. 用于理解C++右值引用的例子

    #include <iostream> using namespace std; void printReference (int& value) { cout << ...

  2. __getattr__属性查找

    from datetime import date """ __getattr__ : 在查找不到对象的属性时调用 __getattribute__ : 在查找属性之前调 ...

  3. python网络编程之验证客户端链接的合法性

    六.socket的更多方法介绍 服务端套接字函数s.bind() 绑定(主机,端口号)到套接字s.listen() 开始TCP监听s.accept() b被动接收TCP客户的连接,(阻塞式)等待连接的 ...

  4. java单双引号转义问题

    JavaScript代码:var str = '<a href="javascript:;" onclick="visaDetail(\'1\',' + value ...

  5. 【HDOJ6627】equation(模拟)

    题意:给定n,整数序列a和b,整数C,求所有成立的x n<=1e5,1<=a[i]<=1e3,-1e3<=b[i]<=1e3,1<=C<=1e9 思路: 大概 ...

  6. 修改Oracle数据库SGA和PGA大小

    SGA的大小:一般物理内存20%用作操作系统保留,其他80%用于数据库.SGA普通数据库可以分配40%-60%之间,PGA可以分配20%-40%之间.1.以dba身份登录并查看SGA信息:SQL> ...

  7. Alisha’s Party

    Alisha’s Party Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  8. 由react循环总结的小知识

    const listItems = numbers.map((numbers,index)=><li key={index}>{numbers}</li>)   cons ...

  9. Linux_Bash常用脚本

    目录 目录 从用户列表中过滤用户名并创建用户 awktrcut 指令的文本处理 tr指令 cut指令 awk指令 备份文件 测试LFTPServer权限设定 开启Httpd 安装Httpd 批量创建用 ...

  10. mysql - 标识列

    #标识列 /* 又称为自增长列 含义:可以不用手动插入值,系统提供默认的序列值 特点: 1.表示列必须和主键搭配吗?不一定,但是要求是一个key 2.一个表中只能有一个标识列! 3.标识列的类型有限制 ...