如何跨函数传递变量?

新手上路,请多包涵

我想在不同的函数之间传递值(作为变量)。

例如,我将值分配给一个函数中的列表,然后我想在另一个函数中使用该列表:

 list = []

def defineAList():
    list = ['1','2','3']
    print "For checking purposes: in defineAList, list is",list
    return list

def useTheList(list):
    print "For checking purposes: in useTheList, list is",list

def main():
    defineAList()
    useTheList(list)

main()

我希望这样做如下:

  1. 将’list’初始化为空列表;打电话给 main (这,至少,我知道我做对了……)
  2. 在 defineAList() 中,将某些值分配到列表中;然后将新列表传递回 main()
  3. 在 main() 中,调用 useTheList(list)
  4. 由于’list’包含在useTheList函数的参数中,我希望useTheList现在将使用defineAList()定义的列表,而不是调用main之前定义的空列表。

但是,我的输出是:

 For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []

“返回”没有达到我的预期。它实际上是做什么的?如何从 defineAList() 中获取列表并在 useTheList() 中使用它?

我不想使用全局变量。

原文由 user2113818 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 793
2 个回答

这就是实际发生的事情:

 global_list = []

def defineAList():
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list
    return local_list

def useTheList(passed_list):
    print "For checking purposes: in useTheList, list is", passed_list

def main():
    # returned list is ignored
    returned_list = defineAList()

    # passed_list inside useTheList is set to global_list
    useTheList(global_list)

main()

这就是你想要的:

 def defineAList():
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list
    return local_list

def useTheList(passed_list):
    print "For checking purposes: in useTheList, list is", passed_list

def main():
    # returned list is ignored
    returned_list = defineAList()

    # passed_list inside useTheList is set to what is returned from defineAList
    useTheList(returned_list)

main()

您甚至可以跳过临时的 returned_list 并将返回值直接传递给 useTheList

 def main():
    # passed_list inside useTheList is set to what is returned from defineAList
    useTheList(defineAList())

原文由 Pavel Anossov 发布,翻译遵循 CC BY-SA 3.0 许可协议

你只是错过了一个关键步骤。您必须明确地将返回值传递给第二个函数。

 def main():
    l = defineAList()
    useTheList(l)

或者:

 def main():
    useTheList(defineAList())

或者(虽然你不应该这样做!起初看起来不错,但从长远来看,全局变量只会让你感到悲伤。):

 l = []

def defineAList():
    global l
    l.extend(['1','2','3'])

def main():
    global l
    defineAList()
    useTheList(l)

该函数返回一个值,但它不会像您的代码假定的那样在任何类型的全局命名空间中创建符号。您必须实际捕获调用范围中的返回值,然后将其用于后续操作。

原文由 Silas Ray 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题