Python:在函数之间传递变量

发布于 2021-01-29 19:26:37

我花了过去的几个小时在这里和其他地方进行阅读和实验,但是我并没有真正理解我确信这是一个非常基本的概念:在不同的函数之间传递值(作为变量)。

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

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. 将“列表”初始化为空列表;打电话给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()中使用?当我看到事情发生时,我往往会更好地理解它们,但是我看到的许多正确传递参数的示例也都使用了我不熟悉的代码,并且在弄清楚发生了什么事情的过程中,我我并没有真正了解这个概念。我正在使用2.7。

过去,ETA提出了类似的问题,有人建议我使用全局变量而不是局部变量。如果在这里也很重要-就我所上课的目的而言,我们不允许使用全局变量。

谢谢!

关注者
0
被浏览
216
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是实际发生的情况:

    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())
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看