3

我在python中有这段代码。

import sys
list1 = ["A", "B", "C"]
list2 = [1, 2, 3]

myarg = sys.argv[1]
print len(myarg)

我会像这样从命令行运行这个脚本

python script.py list1

所以我需要一种方法让 len 使用列表而不是变量,我只想在 var 中给出列表的名称。

我知道这个例子我可以做

if myarg == "list1":
    print len(list1)
else if myarg == "list2"
    print len(list2)

但是我的脚本上有 13 个列表,我需要一种方法来通过我在命令行中给出的名称来引用它们。

4

3 回答 3

8

虽然这在 Python 中是完全可能的,但它不是必需的。这里最好的解决方案是不要这样做,而是有一本字典。

import sys

lists = {
    "list1": ["A", "B", "C"],
    "list2": [1, 2, 3],
}

myarg = sys.argv[1]
print len(lists[myarg])

您注意到您的脚本中有 13 个列表 - 其中有很多类似的数据(或需要以类似方式处理的数据),这表明您需要数据结构,而不是平面变量。它会让你的生活轻松很多。

于 2012-11-10T17:44:33.607 回答
2

因为这是可能的,并且认为@Lattyware 的答案是正确的,所以你可以这样做:

import sys
list1 = ["A", "B", "C"]
list2 = [1, 2, 3]

myarg = sys.argv[1]

print len(globals().get(myarg, []))

如果它打印0,那么你在命令行上有一个错误的参数。

于 2012-11-10T17:47:54.493 回答
1

你不应该,但如果你真的想/必须这样做,你可以使用globals()

print len(globals()[myarg])

首先确保myarg是声明变量的名称:if myarg in globals(): ...

于 2012-11-10T17:47:23.843 回答