引用的问题

引用的问题

为何return后面的       fun2会定义成函数的引用,而不是认为是一个新的变量?


定义一个函数时 def fun1():

语法是这样滴


单独fun1 那为啥可以识别成一个函数?而不是其他新定义的变量fun1?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
大周 2022-07-04 22:05:10

这个问题问的好啊,问到了根源和底层的代码的编译逻辑上。

我们都知道,我们直接写的Python或者是任何其他语言的代码都需要经过一个翻译的过程才能够被计算机所执行,那么翻译的这个过程也是梳理和检查我们代码是不是有问题的一个过程,如果代码不存在明显问题,但实际上会有运行过程中的底层问题时,就会抛出一种异常,我们管这种运行过程中发生的问题叫做运行时异常,如果是编译过程中(代码在运行之前)就发现的问题我们叫做编译时问题。不过你问的这个问题跟异常没有关系,但跟代码的编译有一点点关系,我只是就你这个问题做一点点扩展,我下边正式解释一下你的这个问题。


问题1:为何return后面的       fun2会定义成函数的引用,而不是认为是一个新的变量?

这里就涉及到了编译之后,代码底层会检索到底fun2是个什么东西,然后在检索的时候就发现了,这个东西被我们声明成为了一个函数,所以fun2就被自动处理成为了一个函数的引用,这个也是弱类型语言才能做到的,那么再扩展一下什么是弱类型语言,就是变量在声明时不需要明确的声明具体是什么类型,在Java、C++等语言中,变量在声明的同时就必须同时声明类型。 那么在什么时候会被识别成变量呢,比如你在函数fun1里边又声明了一个变量叫做fun2,这个时候就会处理成为一个变量,因为在引用时,有一个原则,可以理解为叫做就近引用原则,引用时,离谁近就用谁。

这样解释应该能明白个差不多吧。


问题2:

定义一个函数时 def fun1():

语法是这样滴

单独fun1 那为啥可以识别成一个函数?而不是其他新定义的变量fun1?


这个问题其实跟上边回答的问题本质上是一样的,都是编译后检索时,优先发现了这个fun1是一个函数,所以就识别成了一个函数。


如果还不是特别清楚,可以加入到咱们的qq群中,咱们可以针对性的继续讨论一下。  





  • 提问者 我想跑路 #1

    大致明白了。谢谢老师。这种用法应该是弱类型语言独有的吧?

    2022-07-04 22:20:51
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
全能软件测试工程师
  • 参与学习       319    人
  • 提交作业       1554    份
  • 解答问题       169    个

全能软件测试0基础就业急训营,小白都能轻松学会的热门岗位,全面覆盖主流测试技术,多岗位适配,逐级提升,搭配面试指导,掌握功能测试、接口测试、自动化测试、性能测试四大岗位能力,成为企业争抢的全能人才!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师