如何将所有调用的函数参数合二为一(Python 3)[重复]

Posted

技术标签:

【中文标题】如何将所有调用的函数参数合二为一(Python 3)[重复]【英文标题】:How to turn all called function arguments into one (Python 3) [duplicate] 【发布时间】:2016-09-07 07:46:31 【问题描述】:

我正在用 Python 构建一个终端模拟器,我将命令存储在参数中,例如:

def ls(a):
    for item in os.listdir():
        print item

a = input('Command: ')
a = a.split()

终端是这样工作的:

    要求用户输入 拆分输入 使用输入的第一部分在本地搜索函数 如果有,则使用输入的其余部分作为参数 调用函数

我对 cd 命令有疑问。

def cd(a):
    if a == None:
        print('cd')
        print('Change directories')
    else:
        os.chdir(os.getcwd() + '/' + a())

当你让它进入一个没有空格的文件夹时它会起作用,比如当你在提示符中输入cd Windows时,它会起作用。但是,当您尝试输入其中包含空格的文件夹时,问题就开始了。例如,当我键入cd Documents Copy 时,它要么进入文件夹 Documents(如果有),要么崩溃。

我该如何解决?我曾想过将所有被调用的函数参数合而为一,但我不知道该怎么做,可能还有其他方法。

【问题讨论】:

如果参数包含空格,您可以尝试用引号括起来,就像真正的终端一样。 但这不起作用,因为它会拆分输入,就像我输入 cd "Documents Copy",第一部分将是 cd,第二部分是 "Documents,第三部分是 Copy"跨度> 您可能需要进行更复杂的解析。创建终端并非易事。 它一直有效,直到我必须将多个参数作为一个参数 是的,我明白了。我建议阅读一些真实终端的语法,这样你就可以更好地了解你需要为这个项目重新发明哪些***。 【参考方案1】:

您需要一个更复杂的split() 函数——请参阅Split a string by spaces — preserving quoted substrings answer 以获得潜在的解决方案。

更新

如果你有一个名为“the dog”的子目录,里面有一个空格,你可以在解释器中这样做:

Command: cd "the dog"

代码修改大致如下:

import shlex
import os

def ls(a):
    for item in os.listdir():
        print(item)

def cd(a):
    if a == None:
        print('cd')
        print('Change directories')
    else:
        os.chdir(os.getcwd() + '/' + a)

a = input('Command: ')
a = shlex.split(a)

if len(a) > 1:
    locals()[a[0]](a[1][:99])
    print()
else:
    locals()[a[0]](None)
    print()

【讨论】:

如何在我的代码中使用它? @HackerGamerLV,我添加了一些示例使用代码和信息。 嗯...谢谢你,我会试试的! 谢谢,这正是我所需要的。

以上是关于如何将所有调用的函数参数合二为一(Python 3)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将两个 python 装饰器合二为一

Python函数-3

从 C++ 调用 python 函数时如何将 C++ 类作为参数传递?

python 函数参数类型

如何将两个参数传递给由 ajax 函数调用的 python 函数?

Python入门之函数调用——第3关:函数与函数调用 - 分清主次