我想将辅助函数修改为 python2 兼容

I want to modify helper function to be python2 compatible

我想使用这个 CLI 模板 https://mike.depalatis.net/blog/simplifying-argparse.html 用于创建用于访问 EMC Unity REST 的工具 API。

它似乎是用 python3 写的。特别是参数辅助函数。

def argument(*name_or_flags, **kwargs):
    return ([*name_or_flags], kwargs)

我不相信我完全理解参数函数应该如何工作以及如何修改它以使用 python2。

例如如果我有一个函数 create_lun 有几个选项,我想我需要参数到 return 定义的参数列表,因此我会这样装饰它:

@subcommand([argument('-o', '--pool', dest='pool', default="pool_1", 
                   type=str, help='Name of Pool of str arg'),
          argument('lun_name', metavar='lun_name', type=str,
                    help='Name of LUN to create in format: ldom-vol#')])
def create_lun(args):

因此 cli.py create_lun lun_name 将创建 lun,-h 将向我显示此语法。

如果这个假设是正确的,我需要将 python3 的能力转化为

return ([*name_or_flags], kwargs)

转换为 python2.7 等价物。对此的任何想法都非常感谢。

return ([*name_or_flags], kwargs)

相同
return [*name_or_flags], kwargs

相同
return name_or_flags, kwargs

在 python 3 中,语法 [*a_list] 将列表的元素扩展为新的列表文字。它的预期目的是将现有列表插入到新列表中,而不是简单地复制列表。

In [1]: a = list(range(9))

In [2]: a
Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8]

In [3]: [*a]
Out[3]: [0, 1, 2, 3, 4, 5, 6, 7, 8]

In [4]: ['hey', *a, 'there']
Out[4]: ['hey', 0, 1, 2, 3, 4, 5, 6, 7, 8, 'there']

写成[*name_or_flags]似乎是一种混淆视听的尝试。可能作者想要创建 name_or_flags 的新副本,在这种情况下,切片就足够了:

def argument(*name_or_flags, **kwargs):
    return name_or_flags[:], kwargs

如果不需要文案,那么以下内容就足够了。

def argument(*name_or_flags, **kwargs):
    return name_or_flags, kwargs

这将适用于 Python2 和 Python3,并且应该产生相同的结果。