py等价于R中的get()(=使用字符串来检索符号的值)

Ben*_*ker 13 python r

在R中,该get(s)函数检索其名称存储在字符变量(向量)中的符号的值s,例如

X <- 10
r <- "XVI"
s <- substr(r,1,1) ## "X"
get(s)             ## 10
Run Code Online (Sandbox Code Playgroud)

采用罗马数字的第一个符号r并将其转换为等价的整数.

尽管花了一些时间来浏览R-Python词典和谷歌搜索"元编程","语言编程","符号","字符串"等各种组合,我还没有想出任何东西.(我是一位非常有经验的R用户和新手Python用户.)

(我知道上面的例子是一个(非常!)很难解决这个问题的方法.我对这个问题的一般答案很感兴趣,而不是专门将罗马数字转换为整数......)

zw3*_*324 13

你可以使用locals:

s = 1
locals()['s']
Run Code Online (Sandbox Code Playgroud)

编辑:

实际上,getR更多才多艺 - get('as.list')会让你回归as.list.对于类成员,在Python中,我们可以使用getattr(在这里),以及如内置的事len,getattr(__builtins__, 'len')工作.

  • `eval`将评估并执行您提供的任何代码.在你的情况下,这可能没有什么区别,但一般来说它可能是危险的(未经验证/未清除的输入),几乎总是应该避免.`locals()`只返回一个局部变量的字典,这就是你想要的. (6认同)
  • @L3viathan:你能解释一下原因吗? (2认同)

mbo*_*007 5

使用将eval字符串作为表达式求值的函数。

X = 10
r = "XVI"
v = eval(r[0])
Run Code Online (Sandbox Code Playgroud)

重要提示:eval()计算可以在表达式中使用的任何代码,而不仅仅是变量。不要将它直接与用户输入结合使用,这可能会带来安全漏洞。

  • 我理解/同意`locals()` 更好的论点。这对我来说仍然是一个有用的答案,所以我赞成它(但可能会接受`locals()` 答案)。 (2认同)