所以,我用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
表示)作为一个全局变量,执行该函数并将其返回到另一行,但我想找到一种方法不使用全局变量就可以做到。
答案 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)
此功能与前两个相似。在这里,您将获得eggs
中bacon()
的值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 ...