zwy8888 发表于 2020-5-24 13:51:38

零基础入门学习python 课本疑问求解

第二版书本第76页代码:

def funX(x):
        def funY(y):
                return x*y
        return funY
temp=funX(8)
temp(5)

返回值是40,请问这里是怎么看的,因为我感觉上面代码并没有对y值进行定义

望学友们解答,谢谢~

永恒的蓝色梦想 发表于 2020-5-24 13:53:47

我感觉上面代码并没有对y值进行定义为什么不感觉上面代码没有对x值进行定义

Twilight6 发表于 2020-5-24 13:54:53

def funX(x):
      def funY(y):
                return x*y
      return funY

temp(5)
实际上可以分解来看,有助于理解:
先 把 8 传入 funX 并赋值给temptemp=funX(8) :
# 此时 temp 就等于这样的
def funX(8):
    def funY(y):
      return 8 * y
    return funY
然后在 temp(5) 把 5 传入:
def funX(8):
    def funY(5):
      return 8 * 5
    return funY
最后返回 40

liuzhengyuan 发表于 2020-5-24 13:55:28

def funX(x):
      def funY(y):
                return x*y
      return funY
temp=funX(8)
temp(5)

标红的地方难道不是在对 x, y 进行定义吗?

zwy8888 发表于 2020-5-24 13:59:19

liuzhengyuan 发表于 2020-5-24 13:55
def funX(x):
      def funY(y):
                return x*y


我说错了,是我感觉没有赋值

liuzhengyuan 发表于 2020-5-24 13:59:58

zwy8888 发表于 2020-5-24 13:59
我说错了,是我感觉没有赋值

def funX(x):
      def funY(y):
                return x*y
      return funY
temp=funX(8)
temp(5)

这就是赋值

zwy8888 发表于 2020-5-24 14:01:34

Twilight6 发表于 2020-5-24 13:54
实际上可以分解来看,有助于理解:
先 把 8 传入 funX 并赋值给temptemp=funX(8) :



temp(5)这个语句是对y进行赋值的意思吗?我还是有点懵

Twilight6 发表于 2020-5-24 14:03:02

zwy8888 发表于 2020-5-24 13:59
我说错了,是我感觉没有赋值

def funX(x):
    def funY(y):
      return x * y

    return funY

temp = funX(8)(5)
print(temp)
你也可以这样看

Twilight6 发表于 2020-5-24 14:03:58

zwy8888 发表于 2020-5-24 14:01
temp(5)这个语句是对y进行赋值的意思吗?我还是有点懵

内嵌函数的参数是第二个括号里的,第一个括号是外部的函数的参数

Twilight6 发表于 2020-5-24 14:05:31

zwy8888 发表于 2020-5-24 14:01
temp(5)这个语句是对y进行赋值的意思吗?我还是有点懵

是的temp(5)这个语句是对y进行赋值

zwy8888 发表于 2020-5-24 14:11:49

永恒的蓝色梦想 发表于 2020-5-24 13:53
为什么不感觉上面代码没有对x值进行定义

funX(8)就是对x的定义吧

zwy8888 发表于 2020-5-24 14:12:46

liuzhengyuan 发表于 2020-5-24 13:59
def funX(x):
      def funY(y):
                return x*y


好的明白了,谢谢~

永恒的蓝色梦想 发表于 2020-5-24 14:13:01

zwy8888 发表于 2020-5-24 14:11
funX(8)就是对x的定义吧

那 temp(5) 是什么?

zwy8888 发表于 2020-5-24 14:19:56

Twilight6 发表于 2020-5-24 14:03
内嵌函数的参数是第二个括号里的,第一个括号是外部的函数的参数

为什么可以这样写, temp=funX(8) 明明是把函数值赋值给了temp 这样好像temp变成了一个函数一样{:10_243:}

Twilight6 发表于 2020-5-24 14:23:27

zwy8888 发表于 2020-5-24 14:19
为什么可以这样写, temp=funX(8) 明明是把函数值赋值给了temp 这样好像temp变成了一个函数一样{:10_243: ...

没错啊 的确是变成函数了 你可以试试tpye
temp = funX(8)
print(type(temp))
print(temp(5))
运行后结果是:
<class 'function'>
40
因为第一次赋值是赋值给 x只给外部函数的

又因为外部函数返回的是 funY

所以你 temp(5) 就等价于 funY(5)

qiuyouzhi 发表于 2020-5-24 14:24:12

zwy8888 发表于 2020-5-24 14:19
为什么可以这样写, temp=funX(8) 明明是把函数值赋值给了temp 这样好像temp变成了一个函数一样{:10_243: ...

这就是链式调用,
temp就是funX的返回值,也就是一个函数
temp当然可以操作这个函数

zwy8888 发表于 2020-5-24 14:30:09

Twilight6 发表于 2020-5-24 14:23
没错啊 的确是变成函数了 你可以试试tpye

运行后结果是:


嗯嗯,貌似理解了,多谢啦还真是要细品{:10_257:}

zwy8888 发表于 2020-5-24 14:31:08

qiuyouzhi 发表于 2020-5-24 14:24
这就是链式调用,
temp就是funX的返回值,也就是一个函数
temp当然可以操作这个函数

嗯嗯,链式调用 目前对于我是一个新名词,学到啦 谢谢~

Twilight6 发表于 2020-5-24 14:31:09

zwy8888 发表于 2020-5-24 14:30
嗯嗯,貌似理解了,多谢啦还真是要细品

如果帮助到你~那就给个最佳把~
页: [1]
查看完整版本: 零基础入门学习python 课本疑问求解