Python切片多个输出

时间:2019-03-10 06:00:48

标签: python-2.7

我正在做一个项目,在该项目中,我正在制作一个命令行来学习如何在Python中使用curses。我开始为命令的解释器工作,但是有一种情况我想看看是否有更好的解决方案。

我想将字符串输入分成命令和参数。这是我如何做的一个例子:

def processor(inputText):
    command, arguments=inputText.split(' ')[0], inputText.split(' ')[1:]

我可以这样做,但是因为我很挑剔/怪异,所以我不喜欢两次inputText.split(' ')。这是我可以选择缩短的另一个选项:

def processor(inputText):
    inputTextSplit=inputText.split(' ')
    command, arguments=inputTextSplit[0], inputTextSplit[1:]

由于我们正在缩短代码,因此inputTextSplit更长,因此用i替换代码可能会更好:

def processor(inputText):
    i=inputText.split(' ')
    command, arguments=i[0], i[1:]

我的问题是,使用较短的变量,例如i可能导致以后覆盖其他变量(例如在i的{​​{1}}循环中使用for)。这样可以使代码看起来更整洁,但同时,如果不小心,可能会导致问题。

是否有办法将数组的拆分部分转换为变量?例如,在TI-Basic中,您可以将列表作为操作的参数传递。要在TI-Basic中获得图形函数的多个输出,将像这样:

for i in array:

是否有类似的方法可以做这样的假设:

"If Y₁ is 2x, then the results would be as follows:"
Y₁({1, 3})
"{2, 6}"
{Y₁(1), Y₁(3)}
"{2, 6}"

是否有一些先进的Python技术可以做到这一点,或者只是一个懒惰的主意?像def processor(inputText): command, arguments=inputText.split(' ')[[0,1:]] 这样的输入的预期结果将是'command arg1 arg2'

这个概念也不是我想局限于我的项目示例。另一个示例可能是['command', ['arg1', 'arg2']],它将为另一个数组提供4个值,这是原始值的一部分。

此外,我使用的是Python 2.7。预先感谢您的建议。

1 个答案:

答案 0 :(得分:1)

您可以简单地做到:

def processor(inputText):
    command, *arguments = inputText.split(' ')
    return command, arguments

print(processor('command arg1 arg2 arg3'))
# ('command', ['arg1', 'arg2', 'arg3'])

使用*argumentssplit生成的列表的所有剩余部分分配给command后,分配到arguments列表。

您可以在PEP 3132 -- Extended Iterable Unpacking中查看有关此语法的详细信息。