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, 89
、Maths, 92
、Physics, 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 好吧,否则我必须使用globals
thingy【参考方案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++ 函数中获取变量的值?