Python 使用全球词典似乎不好,但确切的原因是什么?

Python 使用全球词典似乎不好,但确切的原因是什么?,python,Python,我心里知道这很糟糕,我就是不知道到底为什么 variable = globals()['__builtins__'][sys.argv[1]] 对于我的项目,我将实现一个字典,它将从命令行获取我需要的类名,这样我就可以限制和控制有效的输入。但我一开始写了,然后就想等等,这很糟糕。我就是说不出确切的原因 variable = globals()['__builtins__'][sys.argv[1]] 有人知道有一篇文章或之前回答的问题可能会解决这个问题吗?如果您打算进行输入消毒,也可以写为:

我心里知道这很糟糕,我就是不知道到底为什么

variable = globals()['__builtins__'][sys.argv[1]]
对于我的项目,我将实现一个字典,它将从命令行获取我需要的类名,这样我就可以限制和控制有效的输入。但我一开始写了,然后就想等等,这很糟糕。我就是说不出确切的原因

variable = globals()['__builtins__'][sys.argv[1]]

有人知道有一篇文章或之前回答的问题可能会解决这个问题吗?

如果您打算进行输入消毒,也可以写为:

ALLOWED_ARGS = {"repr", "str", "unicode"}
funcs = {f: getattr(__builtins__, f) for f in ALLOWED_ARGS}
# funcs.update({"custom": custom_func})

# I'd also assert on all functions having the same arity,
# but this is tricky with builtins...

func = funcs[sys.argv[1]]
不知道为什么,但对我来说似乎更安全


如果你是肯定的,输入总是正确的,你的代码对我来说似乎很好,除了
\uuuu内置的\uuuuu[name]
不应该工作,你必须使用
getattr(\uuuuu内置的\uuuuuuuuu,name)

例如,有更直接的方法来获得你想要的东西
getattr(uu builtins,sys.argv[1])
会做同样的事情。首先,因为您总是访问
globals
的同一个键,并且您知道在编写代码时这个键是什么,所以首先只需要编写
\uu builtins\uuu
而不是
globals()['uu builtins\uu']
。另一方面,我访问过的Python版本中没有一个允许您执行
\uuuuuuuuuuufoo]
;您是否已经运行了此代码?@jwodder:
\uuuuuuuuuuuuuuuu
(如果在当前模块名称空间中可用)。