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
(如果在当前模块名称空间中可用)。