如果这样的列表不为空,我正在寻找一种更好的方法来为列表的内容分配一个集合,否则应该使用另一个列表。
如果有可能,我想要一个更好的方式来写这个(或者为什么这是最好的方式的争论):
if args.onlyTheseServers:
only = set(args.onlyTheseServers)
else:
only = set(availableServers)
答案 0 :(得分:11)
only = set(args.onlyTheseServers or availableServers)
答案 1 :(得分:3)
查看之前的question,我会说你真正想要的是一种使用argparse
为缺失参数分配默认值的方法。在这种情况下,您应该使用default
,如下所示:
parser.add_argument('-o', '--only', default=default_servers, ...)
这样,当未传递-o/--only
选项时,命名空间将正确设置默认值。
答案 2 :(得分:2)
args.onlyTheseServers
似乎是来自argparse
的变量。
如果是这种情况,您应该检查default
参数和set_default()
方法。
以下是一个例子:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='*', default=['1', '2', '3'])
>>> args = parser.parse_args()
>>> args.foo
['1', '2', '3']
>>> args = parser.parse_args(['--foo', 'a', 'b'])
>>> args.foo
['a', 'b']
答案 3 :(得分:1)
不是更好,但至少有点短:
only = set(availableServers if args.onlyTheseServers is None
else args.onlyTheseServers)
您也可以
only = set(args.onlyTheseServers or availableServers)
它的工作方式略有不同,因为它不测试None
,但只有当参数为true时才是 - 在这种情况下它应该可以工作。
答案 4 :(得分:0)
叫我疯狂购买我更喜欢这个
only = set(args.onlyTheseServers) if args.onlyTheseServers is not None else set(availableServers)