Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于在Python中定义函数的问题_Python_Python 3.x - Fatal编程技术网

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

关于在Python中定义函数的问题,python,python-3.x,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: pr

我目前正在使用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(每个_项)起作用?我理解,逻辑是程序将查看每个项目,如果它不在列表中,它将只打印项目,但如果是,计算机如何知道打印是什么?我认为第一行也不能充分解释print_lol。print\u lol是Python 3附带的命令吗?

您在第1行声明了一个函数,您选择调用它,在第4行,您从内部递归调用它
print\u lol
不是python中的命令,它实际上是您在提供的代码中声明的函数


非常简单,想想函数
print\u lol
,就像它为每次递归调用去掉一层列表,直到它不再是列表,而只剩下字符串。然后它打印这些字符串。

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

您可以编写这样的函数

def f():
    return k()
代码很好,但在执行函数时,k必须在运行时存在


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

搜索编程中递归函数的定义(它是一个调用自身的函数)首先执行脚本时,
def
,然后是定义(但不执行)函数的命令。然后在全局名称空间中以名称
print\u lol
输入函数。当稍后调用该函数时,定义很容易获得。