liyuaneec 发表于 2018-5-11 09:30:46

零基础python 第21课 课后题6的问题

def make_repeat(n):
        return lambda s: s*n

double= make_repeat(2)
print(double(8))

这个8是怎么传递进入的呢,make_repeat只有一个n作为参数。double里面也没有形参呀。想不通呀。望各位指点。

BngThea 发表于 2018-5-11 09:48:07

make_repeat函数返回的是一个lambda函数,也就是说返回的是一个函数指针
该函数需要一个变量,对应lambda函数中的s
所以这个8就是那个s,结果就是8**2,也就是64

fuwaandhuluwa 发表于 2018-5-11 09:48:31

lambda表达式本身带一个参数s,所以需要传递一个参数,当然你也可以改写:方便理解如下:

def make_repeat():
      return lambda s, n: s*n

double= make_repeat()
print(double(8,2))

1单个参数的:
g = lambda x:x*2
print g(3)
结果是6

2多个参数的:
m = lambda x,y,z: (x-y)*z
print m(3,1,2)
结果是4

咕咕鸡鸽鸽 发表于 2018-5-11 09:51:56

emmm,建议再看下21课视频就了解了
8是赋值于里面的匿名函数的参数s

liyuaneec 发表于 2018-5-11 09:52:45

咕咕鸡鸽鸽 发表于 2018-5-11 09:51
emmm,建议再看下21课视频就了解了
8是赋值于里面的匿名函数的参数s

但是python是如何做到的呢,他怎么知道8就是要传给s呢。

ABC23 发表于 2018-5-11 10:20:56

liyuaneec 发表于 2018-5-11 09:52
但是python是如何做到的呢,他怎么知道8就是要传给s呢。

double(8)这是强制类型转换。
想想Java、C的(double)8你就明白了

轻轻4843 发表于 2018-5-11 10:33:20

跟各楼大神学习了,围观中

AylmerS 发表于 2019-8-1 20:35:08


def make_repeat(n):
      return lambda s: s*n

double= make_repeat(2)                  make_repeat(2)定义了形参n变成了实参2
print(double(8))                              double(8)的时候变成了 lambda s: s*2             8就强制给了形参s所以是8x2

15026620281 发表于 2020-5-24 23:15:57

谢谢楼上各位的回答,稍微能理解一些了。
页: [1]
查看完整版本: 零基础python 第21课 课后题6的问题