鱼C论坛

 找回密码
 立即注册
查看: 2856|回复: 1

[已解决][新兵求助]关于内置函数是用'return 内置函数名'还是'内置函数名()'方式进行调用?

[复制链接]
发表于 2022-11-23 20:01:22 | 显示全部楼层 |阅读模式

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

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

x
请教各位大神:

在<零基础入门学习Python>第6章-<内置函数>中,在第74页的第一个例子:
def fun1():
    print('fun1()正在被调用')
    def fun2():
        print('fun2()正在被调用')
    fun2()
其中内置函数fun2是被外部函数fun1通过fun2()方式进行调用.

而第756页闭包中第一个例子:
def funX(x):
    def funY(y):
        return x*y
    return funY
内置函数funY是被外部函数funX通过return funY方式进行调用,这时的return语句到底起了什么作用?
如果把return funY修改为funY(),当给外部函数funX赋值temp = funX(8)时,系统会报错,提示TypeError: funY() missing 1 required positional argument: 'y',这又是为何?

或许能不能这么理解,当内部函数体内使用了return语句,外部函数对内部函数进行调用时,也必须使用return语句进行调用?

盼各位大神指点迷津,谢谢!!!
最佳答案
2022-11-23 20:11:43
本帖最后由 jackz007 于 2022-11-23 20:23 编辑
  1. def funX(x):
  2.     def funY(y):
  3.         return x*y
  4.     return funY          # 返回内嵌函数 funY() 的调用地址

  5. f = funX(5)              # f 为 以 x = 5 所初始化的内嵌函数 funY() 调用地址
  6. print(f(8))              # 以 x = 5,y = 8 调用 funX() 的内嵌函数 funY()
  7. print(f(9))              # 以 x = 5,y = 9 调用 funX() 的内嵌函数 funY()
  8. print(f(10))             # 以 x = 5,y = 10 调用 funX() 的内嵌函数 funY()
  9. print(funX(5)(8))        # 以 x = 5,y = 8 调用 funX() 的内嵌函数 funY()
复制代码


        关于函数调用地址赋值可以参考这个例子:
  1. a = input                    # 把函数调用地址赋值给普通变量
  2. b = print                    # 把函数调用地址赋值给普通变量
  3. name = a('输入您的姓名:')   # 通过变量 a 调用 input() 函数
  4. b('您好', name)              # 通过变量 b 调用 print() 函数
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-23 20:11:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-23 20:23 编辑
  1. def funX(x):
  2.     def funY(y):
  3.         return x*y
  4.     return funY          # 返回内嵌函数 funY() 的调用地址

  5. f = funX(5)              # f 为 以 x = 5 所初始化的内嵌函数 funY() 调用地址
  6. print(f(8))              # 以 x = 5,y = 8 调用 funX() 的内嵌函数 funY()
  7. print(f(9))              # 以 x = 5,y = 9 调用 funX() 的内嵌函数 funY()
  8. print(f(10))             # 以 x = 5,y = 10 调用 funX() 的内嵌函数 funY()
  9. print(funX(5)(8))        # 以 x = 5,y = 8 调用 funX() 的内嵌函数 funY()
复制代码


        关于函数调用地址赋值可以参考这个例子:
  1. a = input                    # 把函数调用地址赋值给普通变量
  2. b = print                    # 把函数调用地址赋值给普通变量
  3. name = a('输入您的姓名:')   # 通过变量 a 调用 input() 函数
  4. b('您好', name)              # 通过变量 b 调用 print() 函数
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 17:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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