使用命令行中的排序键

时间:2012-01-17 21:41:01

标签: python

我需要从命令行允许用户定义的排序键,例如

sort(key=commandLineArg)

但是commandLineArg是一个字符串,不可调用。我怎样才能做到这一点?

3 个答案:

答案 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

但只有在你真的信任用户的情况下才这样做!