鱼C论坛

 找回密码
 立即注册
查看: 1352|回复: 5

[已解决]20讲内嵌函数相关问题,没有定义的变量为什么不报错?

[复制链接]
发表于 2020-10-19 19:58:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就20讲的一道题问个额外问题:
  1. def funOut():
  2.     def funIn():
  3.         print('宾果!你成功访问到我啦!')
  4.     return funIn
复制代码


这个函数调用的时候为什么不会被报错?funIn在这里应该是个没有被定义的变量呀;

(说明一下这里不是finIn(),就是没有括号,是小甲鱼讲闭包时的例题;我的问题和这章应该没关系)
最佳答案
2020-10-19 22:18:35
def funOut():#funOut()函数返回值为'class'类型,因为funIn无括号
    def funIn():    #funIn()函数无返回语句,返回None,此语句相当于给funIn赋值,表明它是个'class'类型(函数)
        print('宾果!你成功访问到我啦!')
    print(funIn())
    return funIn

print(type(funOut()))
=========加2条print语句就可以验证结果了========
PS G:\Python作业> & C:/Users/QingMo/AppData/Local/Programs/Python/Python38-32/python.exe g:/Python作业/temp.py
宾果!你成功访问到我啦!
None
<class 'function'>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-19 20:14:15 | 显示全部楼层
def 不就是定义的意思嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-19 20:49:12 From FishC Mobile | 显示全部楼层
返回函数地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-19 21:09:37 | 显示全部楼层
你在funOut函数中先定义了funIn。然后返回了funIn。所以没有报错。注意这里返回的是funIn这个函数,而不是funIn执行后的结果funIn()。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-19 22:18:35 | 显示全部楼层    本楼为最佳答案   
def funOut():#funOut()函数返回值为'class'类型,因为funIn无括号
    def funIn():    #funIn()函数无返回语句,返回None,此语句相当于给funIn赋值,表明它是个'class'类型(函数)
        print('宾果!你成功访问到我啦!')
    print(funIn())
    return funIn

print(type(funOut()))
=========加2条print语句就可以验证结果了========
PS G:\Python作业> & C:/Users/QingMo/AppData/Local/Programs/Python/Python38-32/python.exe g:/Python作业/temp.py
宾果!你成功访问到我啦!
None
<class 'function'>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-20 08:51:54 | 显示全部楼层
刚查了下CSDN才了解(我是最后一个知道的么
1、不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不需等该函数执行完成
2、带括号(此时必须传入需要的参数),调用的是函数的return结果,需要等待函数执行完成的结果

如果函数本身带有参数的时候,带括号就就必须带参数,同理函数本身不带参数,带括号就不能带参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 13:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表