我需要从命令行允许用户定义的排序键,例如
sort(key=commandLineArg)
但是commandLineArg
是一个字符串,不可调用。我怎样才能做到这一点?
答案 0 :(得分:3)
您将str.lower
的示例作为命令行参数。虽然可能使用eval
将这样的字符串转换为Python对象,但这样做很危险,我可能会建议另一步。例如:
SortKeys = {
"capitalize": str.capitalize,
"lower": str.lower,
"title": str.title,
"upper": str.upper,
}
if sys.argv[1] in SortKeys:
sort(..., key=SortKeys[sys.argv[1]])
else:
print("Unknown sort key:", sys.argv[1])
这种方法可以让您更好地控制排序键的可能类型,而不允许任意代码执行。
答案 1 :(得分:1)
您可以使用operator.itemgetter:
>>> import operator
>>> sort(key=operator.itemgetter("somekey"))
当您只将属性名称作为字符串时,对对象的属性进行排序。
答案 2 :(得分:0)
您可以评估给定的字符串以获得可调用的内容:
In [27]: eval('lambda x: x**2')(3)
Out[27]: 9
但只有在你真的信任用户的情况下才这样做!