零基础python 第21课 课后题6的问题
def make_repeat(n):return lambda s: s*n
double= make_repeat(2)
print(double(8))
这个8是怎么传递进入的呢,make_repeat只有一个n作为参数。double里面也没有形参呀。想不通呀。望各位指点。 make_repeat函数返回的是一个lambda函数,也就是说返回的是一个函数指针
该函数需要一个变量,对应lambda函数中的s
所以这个8就是那个s,结果就是8**2,也就是64 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 emmm,建议再看下21课视频就了解了
8是赋值于里面的匿名函数的参数s 咕咕鸡鸽鸽 发表于 2018-5-11 09:51
emmm,建议再看下21课视频就了解了
8是赋值于里面的匿名函数的参数s
但是python是如何做到的呢,他怎么知道8就是要传给s呢。 liyuaneec 发表于 2018-5-11 09:52
但是python是如何做到的呢,他怎么知道8就是要传给s呢。
double(8)这是强制类型转换。
想想Java、C的(double)8你就明白了 跟各楼大神学习了,围观中
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
谢谢楼上各位的回答,稍微能理解一些了。
页:
[1]