有关在Python中定义函数的问题

时间:2018-10-07 22:13:21

标签: python python-3.x

我目前正在通过Head First Python进行工作,并且开始致力于定义函数。下面这个程序的目标是创建一个函数print_lol(),它使用一个参数:要在屏幕上显示的列表。起作用的最终代码如下:

def print_lol(the_list):
    for each_item in the_list:
        if isinstance(each_item,list):
            print_lol(each_item)
        else:
            print(each_item)

因此,如果我们输入以下列表:

movies=["The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91, ["Graham Chapman", ["Michael Palin", "John Cleese", "Terr Gilliam", "Eric Idle", "Terry Jones"]]]

将仅输出此数组中的所有条目。

我的问题是,第四行的print_lol(each_item)为什么起作用?我了解逻辑是该程序将查看每个项目,如果不在列表中,它将仅打印该项目,但是如果这样,计算机将如何知道print_lol是什么?我也不认为第一行足以解释print_lol。 print_lol是Python 3随附的命令吗?

2 个答案:

答案 0 :(得分:1)

您在第1行上声明了一个选择调用print_lol的函数,在第4行上从其内部递归调用了该函数。 print_lol不是python附带的命令,实际上是您在提供的代码中声明的函数。

非常简化,想想函数print_lol就像它在每次递归调用时都离开了一层列表,直到不再是列表,而只剩下字符串了。然后打印这些字符串。

答案 1 :(得分:1)

在python中,它在运行时解析名称。

您可以编写这样的函数

def f():
    return k()

代码很好,但是执行该函数时必须在运行时存在k。

发生的事情是,“ def f”在全局符号列表中插入了一个名为f的条目,因此,在运行时找到f()时,将在全局符号中搜索“ f”,在您的示例中为在那里,因为它是先前定义的。