经过多个函数

时间:2018-04-18 14:39:01

标签: python-3.x function

所以,我用Python 3.5进行编码。

对于上下文,我目前正在编写一个程序(相对简单),它使用菜单存储在类的实例中我定义了用户将使用该程序的选项。 为了编写菜单,我创建了几个函数,并且我从一个函数传递到另一个函数,总是添加包含选项的实例作为参数。 我需要将菜单作为一个函数调用,并让它在通过菜单后返回实例。

我的代码和我的问题可以像这样简化:

def spam(eggs):
    if eggs is None:
        bacon()
    return eggs

def bacon():
    eggs = ["spam, spam, spam, egg, and spam"]
    sausage(eggs)

def sausage(eggs):
    eggs.append("spam, spam, spam, spam, spam, spam, baked beans, spam, spam, spam, and spam")
    spam(eggs)

print(spam(None))

我想要的是能够致电spam()并让它返回eggs。 在这种情况下,基本上简化我的代码与我认为在我面临的问题时相关的是,调用该函数只返回None

由于我对Python很新,我不明白为什么它不起作用。

我知道有可能将该类实例(此处由列表eggs表示)作为一个全局变量,执行该函数并将其返回到另一行,但我想找到一种方法不使用全局变量就可以做到。

2 个答案:

答案 0 :(得分:1)

以下代码应该有效:

def spam(eggs):
    if eggs is None:
        return bacon()
    return eggs

def bacon():
    eggs = ["bacon"]
    return sausage(eggs)

def sausage(eggs):
    eggs.append("sausage")
    return spam(eggs)

print(spam(None))

您可以根据需要更改字符串。

答案 1 :(得分:1)

您的代码

让我们看看你的代码是做什么的。

def spam(eggs):
    if eggs is None:
        bacon()
    return eggs

这是您的第一个问题,bacon()既不打印任何内容,也不修改此版本的eggs。目前,它也没有返回任何内容(它返回None)。如果确实如此,那就不重要了,因为你没有对它返回的值做任何事情。

def bacon():
    eggs = ["spam, spam, spam, egg, and spam"]
    sausage(eggs)

目前还不清楚你要做什么。发生的事情是您正在创建一个项目的list - 这是字符串"spam, spam, spam, egg, and spam"。如果您想创建一个列表,其中每个项目都作为单独的字符串,那么['spam','spam','spam','egg','spam']或类似的内容取决于您对'and'的处理方式。

下一个问题是您将其存储在eggs中。但是,这与eggs中的spam()不同(它是本地变量),因此您在此处所做的任何更改都不会反映在spam()中,除非您返回任何值希望spam()可以将eggs分配给该版本。

此功能的最后一个问题与spam()的问题相同,因为您没有对sausage(eggs)返回的值执行任何操作,而sausage(eggs)不会打印任何内容 - - 因此,通过运行它无法实现任何目标。

def sausage(eggs):
    eggs.append("spam, spam, spam, spam, spam, spam, baked beans, spam, spam, spam, and spam")
    spam(eggs)

此功能与前两个相似。在这里,您将获得eggsbacon()的值sausage()。但是,对它的任何修改都是无效的,因为您不修改该版本,eggs.append(不会返回任何内容。

) ... eggs有一个与以前类似的问题,因为您只需在列表末尾添加一个字符串spam(),而不是单个项目。这可能是你的意图,但目的不明确。

eggs返回print(spam(None)) 的值,但结果没有任何效果。因此,这一陈述没有任何结果。

def spam(eggs):
    if eggs is None:
        return bacon()
    return eggs

def bacon():
    eggs = ["spam", "spam", "spam", "egg", "spam"]
    return sausage(eggs)

def sausage(eggs):
    eggs = eggs + ["spam", "spam", "spam", "spam", "spam", "spam", "baked beans", "spam", "spam", "spam", "spam"]
    return spam(eggs)

print(spam(None))

解决方案

此解决方案是您要完成的工作的近似值。

CASE ... WHEN ...