python - 使用全局字典似乎很糟糕,但到底为什么呢?

标签 python

我的直觉知道这不好,但我只是无法确切说明原因。

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]]

不知道为什么,但对我来说似乎更安全。

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

关于python - 使用全局字典似乎很糟糕,但到底为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16490613/

相关文章:

python 字典设置最小大小

python - 打印介于 "-"和 "-"之间的字符串

python - Django "detail": "Method\"GET\"not allowed." (one to many relationship)

python - D-lib 物体检测器训练

python - 如何在 netcdf python 中传递复杂参数

python - 可以在管道处理期间从 spaCy 文档中删除 token 吗?

python - 如何删除通过 Appengine 中的 Key 属性连接的实体连接的所有实体

python - 除以 numpy 数组

python - 使用 python 读取 URL 时出错,如何修复

python - 尝试在一行 if 语句中使用 pass 关键字时出错