我正在做一个项目,在该项目中,我正在制作一个命令行来学习如何在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。预先感谢您的建议。
答案 0 :(得分:1)
您可以简单地做到:
def processor(inputText):
command, *arguments = inputText.split(' ')
return command, arguments
print(processor('command arg1 arg2 arg3'))
# ('command', ['arg1', 'arg2', 'arg3'])
使用*arguments
将split
生成的列表的所有剩余部分分配给command
后,分配到arguments
列表。
您可以在PEP 3132 -- Extended Iterable Unpacking中查看有关此语法的详细信息。