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。
通过整理以上的思路,我们就可以很容易的分析出本题的正确答案是“报错”。
在这里就不继续分析啦。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hao难懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值