【问题标题】:How to get char from string as a variable name? [duplicate]如何从字符串中获取char作为变量名? [复制]
【发布时间】:2019-08-28 13:31:55
【问题描述】:

我是新手,刚刚学习 python 并徘徊如何获取我从 for 循环中获得的字符作为变量名而不是实际字符

我有 3 个数组

a=[1,2,3]
b=[2,3,4]
c=[3,4,5]

和for循环

for x in "abc":
    some_function(x)

例如这是我的功能......

def some_function(array):
    print(sum(array))

但它不起作用...我希望 x 是 'a' 但不是 char,而是作为变量 a ,数组,这将赋予我的函数并做一些事情

【问题讨论】:

  • 如果你有大量这样的变量,你真的应该考虑使用字典。查看重复的原因和好的建议。

标签: python string list variables char


【解决方案1】:

如果你真的想使用字符串"abc",可以使用eval函数:

for x in "abc":
    some_function(eval(x))

正常的“正确”方法是循环访问(a, b, c),就像其他人提到的那样,但 Python 的好处是有各种有趣的方法来做事。

【讨论】:

  • 重要的是要提一下eval 很危险,建议较少。
  • 是的,我同意,尤其是作为一个 python 新手,你不应该养成使用它来做这些事情的习惯。尽管在这种特定情况下它是无害的,因为很明显唯一可能被评估的代码是abc。一个类似但不太危险的方法:some_function(globals()[x]),假设 a、b 和 c 是全局变量。 globals() 只返回一个全局变量字典。如果 a、b 和 c 是函数中的局部变量,则更改为 locals()
【解决方案2】:

不要使用字符串,而是使用元组中的所有列表,如下所示:

for x in (a, b, c):
    some_function(x)

现在,some_function 计算每个列表的总和,因此输出如下所示:

6
9
12

如果您需要坚持使用字符串,请创建一个字典来存储映射并在循环中使用它:

d = {'a': [1,2,3], 'b': [2,3,4], 'c': [3,4,5]}

def some_function(array):
    print(sum(array))

for x in 'abc':
    some_function(d[x])

# 6
# 9
# 12

【讨论】:

  • 元组可能更高效一点?
  • 谢谢。当然这会起作用,但我想用字符串的方式来做......我正在从文档中读取字符串,很长,我对每个字母都有唯一的数组,我不想为每个字母写 if 语句。没有实际比较然后通过带有预分配变量的函数发送的方法吗?需要更简单的方法
  • @TrebledJ,是的,元组迭代比列表快(尽管差距不大)。建设是开销。我应该考虑重构它。谢谢。
  • @CleverBot,正如对问题的评论中所建议的那样,您应该使用字典来存储映射。查看链接。
  • 我更新了我的答案以展示如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-17
相关资源
最近更新 更多