我希望解析关键字参数以确定它们是否也引用类型,例如下面的情况:
from inspect import isclass
def convert(converting, **kwargs):
for key, value in kwargs.items():
if value and isclass(eval(key[1:])):
return(eval(key[1:])(converting))
string = "Hello!"
print(convert(string, _list = True))
我很清楚eval
对未知字符串存在安全问题,这就是为什么我正在寻找一种更安全的方法来根据关键字名称确定类型。
可以通过以下方式检查内置类型import builtins; isclass(getattr(builtins, 'str'))
, 按照一位客人的 https://stackoverflow.com/users/3767239/a-guest评论here https://stackoverflow.com/users/3767239/a-guest,但我仍然对如何检查其他课程感到困惑。也许isclass(getattr(globals(), key[1:]))
?
Python 通常使用 LEGB 查找名称。由于没有外地人,所以可以忽略E
。你知道你没有本地名字,所以L
也消失了。所以等效的查找确实是调用globals
以及搜索builtins
.
如果您只关心钥匙,那么您就不需要字典。这样,您就可以明确地传递简单的字符串,并且不需要使用额外的字符来玩游戏:
import builtins
from inspect import isclass
def convert(target, *names):
for name in names:
obj = globals().get(name, getattr(builtins, name, None))
if isclass(obj):
return obj(target)
return converting
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)