Python如何获取变量名的值? [复制]

Posted

技术标签:

【中文标题】Python如何获取变量名的值? [复制]【英文标题】:Python how to get the value with variable name? [duplicate] 【发布时间】:2019-07-18 02:59:35 【问题描述】:

例如,我们将三门课程的成绩存储在LIST

English, Maths, Physics = 89, 92, 93
LIST = [English, Maths, Physics]
for i in range(len(LIST)):
    print(LIST[i])

我希望打印样式类似于English, 89Maths, 92Physics, 93。这是一个定义另一个列表的解决方案LIST_name

English, Maths, Physics = 89, 92, 93
LIST = [English, Maths, Physics]
LIST_name = ['English', 'Maths', 'Physics']
for i in range(len(LIST)):
    print(LIST_name[i], LIST[i])

我想知道是否有内置函数或其他一些技巧可以帮助我直接将English 转换为"English",而不定义LIST_name?如果是这样,怎么办?正如 Barmar 在下面评论的那样,我正在寻找的是如何从一个值转到它来自的变量的名称?

【问题讨论】:

使用字典而不是列表。 "English": English, "Maths": Maths, "Physics": Physics 或者学习足够的编程来为对象创建一个类,其中包含每个实例的名称、分数和其他相关信息。 同一个值可以保存在多个变量中。 然后edit你的问题来解释你希望解决哪个实际问题以及为什么字典不适合。 有经验的程序员的普遍感觉是,如果你需要做你想做的事,那你就做错了。编程语言具有像字典这样的数据结构是有原因的。 【参考方案1】:

您可以有一个方法,将变量关键字 args 作为输入,并为您提供带有键值对的 dict

 def marks(**m):
  return m

 d=marks(English=90,Maths=100,Physics=90)  #call method with keyword args
 print(d)

输出:

   'English': 90, 'Maths': 100, 'Physics': 90

你也可以迭代dict

for k,v in d.items():
  print(k,v,sep=', ')

输出

English, 90
Maths, 100
Physics, 90

【讨论】:

这将如何与他的 LIST 变量一起使用? 这是另一个问题的正确答案。 这是我的知识,先生,我还在学习@Barmar【参考方案2】:

添加到@Deadpool 的答案,您可以使用:

>>> dict(English=82,Maths=92,Physics=93)
'English': 82, 'Maths': 92, 'Physics': 93
>>> 

更符合您的情况的是:

>>> print('\n'.join(map(lambda x: ', '.join(map(str, x)), dict(English=82,Maths=92,Physics=93).items())))
English, 82
Maths, 92
Physics, 93
>>> 

【讨论】:

他说他不想用字典。 @Barmar 好吧,否则我必须使用 globalsthingy【参考方案3】:

定义一个代表您正在使用的对象的类并覆盖__str__(以及可选的__repr__)函数:

class Course(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def __str__(self):
        return self.name + ', ' + str(self.score)
    def __repr__(self):
        return '<0.1 object at 2> 3'.format(self.__class__.__module__,
                                            self.__class__.__name__,
                                            hex(id(self)), str(self))

English, Maths, Physics = list(map(lambda x:Course(*x), zip(['English','Math','Physics'],[89,92,93])))

或者,使用dict 结合其他建议:

English,Maths,Physics = list(map(lambda x:Course(*x), dict(English=82,Maths=92,Physics=93).items()))

然后你可以:

>>> LIST = [English, Maths, Physics]
>>> for i in LIST:
...     print(i)
...
English, 89
Math, 92
Physics, 93

【讨论】:

他不想使用像['English','Math','Physics']这样的名字列表 @Barmar 观察并进行了编辑以解决这一特殊要求。 他也不想用字典。 他不想做任何需要他明确输入字符串的事情,他想从变量中自动获取。这是不可能的。 正确。不可能,所以,做一些其他可能的事情。喜欢这些答案中的任何一个。

以上是关于Python如何获取变量名的值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 BigQuery 中的 Array(Struct) 类型数据结构中获取每个键名的值

如何使用 Python 和 Flask 获取请求变量的值 [重复]

如何使用 Python 从预定义的 C++ 函数中获取变量的值?

如何检查环境变量是不是存在并获取其值? [复制]

C语言getenv()函数的用法?(获取系统某个环境变量字符串名的值)

获取与python中的对象对应的所有可能变量名的列表[重复]