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

最新文章

  1. ISurfaceOp 接口生成等高线
  2. 支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示
  3. 面向对象分析方法(II)
  4. hdoj1325 Is It A Tree?
  5. spring获取properties
  6. (转载)PHP使用header函数设置HTTP头的示例方法表头
  7. js将对象转成字符串-支持微信
  8. SpringMVC之数据绑定(转)
  9. mysql 中的 IF 和 IFNULL 用法
  10. Codeforces AIM Tech Round (Div. 2)
  11. ASP.NET - 无限极分类
  12. CentOs Linux 文件位置标记
  13. 阿里云手动搭建k8s搭建中遇到的问题解决(持续更新)
  14. networkx 学习
  15. Devops step by step
  16. PID控制器开发笔记之三:抗积分饱和PID控制器的实现
  17. 剑指offer(45)扑克牌顺子
  18. 小程序https请求,http网站升到https
  19. Linux - YUM包管理
  20. 浅谈Arrays.asList()方法的使用

热门文章

  1. Beats:如何创建一个定制的Elastic Beat
  2. 【leetcode】1042. Flower Planting With No Adjacent
  3. AGC040
  4. Airtest断言方法
  5. Windows定时任务+bat文件+WinRar处理Mysql数据库的定时自动备份
  6. .Net-WCF-图书:《WCF编程》
  7. vue事件的绑定
  8. 模拟赛T5 : domino ——深搜+剪枝+位运算优化
  9. 5期-Metasploitable3专题课程
  10. 认识requests库,以及安装方法