python函数应该先定义后调用

关于python第十一套试题中第26题选择题。
题目如下:
def fun1():
    print("in fun1()")
    fun2()
fun1()
def fun2():
    print("in fun2()")
    fun1()
fun2()
我看到这一题时第一印象就选择了“死循环”,但是事实却恰恰相反,正确答案是“报错”。
那么就来找一下原因吧。
def fun1():
	print("in fun1()")	
fun1()

当我们执行这个代码时,毫无疑问可以正常输出。让我们在看一下下面这个代码的执行。

fun1()
def fun1():
	print("in fun1()")
	
我们将定义和调用的顺序颠倒了。这是我们再执行就会报错。
(NameError: name 'fun1' is not defined)
这个我们应该比较好理解,应为我们并没有去定义一个名为fun1的函数,所以我们无法调用。
那么让我们再深入一下。


def fun1():
	fun2()	
	
def fun2():
	print("in fun2()")	
	
print("hello")	
fun1()

以上这个代码为什么可以正常执行呢?它在fun1函数的时候又不知道有fun2函数,它为什么不
报错呢?	     这是因为python执行时,它只去读取函数名,但是不没有进入函数内部,所以
它并不了解函数的内部执行的到底是啥。当我们在最后调用fun1时它才会进入,然后发现要执行
fun2函数,这时候它已经知道有一个函数叫fun2的,所以他就可以执行。


def fun1():
	fun2()
	
print("hello")	
fun1()	

def fun2():
	print("in fun2()")
	
以上这个代码,您应该猜到它会报错啦。这我们用上面的思路有验证一下。
执行代码,程序知道了一个叫fun1的函数,然后打印输出“hello”,碰到调用fun1函数,
进入函数内部,原来要调用名为fun2的函数,但是我们没有见过它啊,所以就会报出错误。
NameError: name 'fun2' is not defined。
通过整理以上的思路,我们就可以很容易的分析出本题的正确答案是“报错”。
在这里就不继续分析啦。
发布了179 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ExclusiveName/article/details/104521587
今日推荐