【发布时间】:2016-12-11 23:42:47
【问题描述】:
我编写了一个执行一些复杂任务的程序。我认为确保我的代码简洁明了的最好方法是定义多个函数。不幸的是,通过这样做,我遇到了一个问题,我必须从各种函数返回多个值以用于其他函数,并且被这一切绊倒。
这基本上是我的程序,但经过简化,将其粘贴到 IDLE 中,它应该适合你。
def function_zero():
a = ['1', '2', '3']
b = ['4', '5', '6']
c = ['0']
d = ['0']
return a, b, c, d
def function_one(a):
for i in a:
function_two(i)
# m, l = function_two(i)
def function_two(i):
morel = []
lessl = []
sum_i = int(i)*2
if sum_i >= 3:
morel.append(i)
if sum_i <= 3:
lessl.append(i)
# return m, l
def function_three(a, b, c, d):
#def function_three(a, b, c, d, m, l):
print a, b, c, d
#print m, l
def main():
a, b, c, d = function_zero()
function_one(a)
function_three(a, b, c, d)
# function_three(a, b, c, d, e, f)
if __name__ == '__main__':
main()
函数 0 解析报告,生成值 a、b 等。函数一实际上使用 itertools 和 izip 将 a 和 b 合并在一起,但为简单起见,这是隐藏的。本质上,它的作用是执行一个需要两个参数的命令,重要的是这些命令在迭代中完成。
函数二介绍了这里的主要问题,列出对象l和m。我不知道这些应该在哪里启动,如果我在函数之外启动它们,它可能会变得混乱,所以我在函数二内完成了。由于 NameError 和未解析的引用,我在尝试在函数三(函数三是报告函数)中打印它们时也遇到了严重问题。
无需重写函数和进行重大修改(这意味着如果有人建议更简单的方法,我将不得不重写我的程序,如果我采用它,这可能意味着我在其他地方失去了功能)。谁能告诉我如何将在函数二中启动的 m 和 l 传递到函数一,以便在函数三中访问它们?
任何建议都将不胜感激,正如您从注释代码中看到的那样 - 我试图解决这个问题,但我想在无助地破解之前我会寻求一些帮助。
【问题讨论】:
-
你能给minimal reproducible example 一个不那么抽象的函数集吗?
-
您演示了如何在保存对
function_zero返回的值的引用以及使用其中一个引用的参数调用function_one时传递变量。用function_two做类似的事情。 -
不是将单个
i传递给function_two,而是传递整个a并返回a并分成m, l = function_two(a)。目前尚不清楚您打算如何处理这些分区值。顺便说一句,有一个名为partition()的itertools配方可能有用。
标签: python python-2.7 list function