CS61A:FUNCTION EXAMPLES

就拿最后一个式子来说,print函数的参数是delay(print)()(4),print将输出 delay(print)()(4)的返回值,delay函数被调用,参数为print,输出delayed,而delay(print)()则是调用了delay函数的g函数,返回值是print函数,delay(print)()(4)则是调用了刚刚返回的print函数,输出4,返回None,于是,最外围的print接收到参数None,并打印None,返回None

对于add(pirate(3)(square)(4),1),add是将 pirate(3)(square)(4)的返回值和1相加并返回,pirate(3)(square)(4)是先将3传入pirate,打印matey,将3传入plunder,返回3给plunder,再返回函数plunder给pirate,也就是说,pirate(3)实际上是函数plunder,我们继续看后面,(square),表示调用pirate(3),也就是plunder,传入函数square,返回函数square,(4)则是调用函数square

pirate(pirate)返回plunder,恒等函数,最终传入5,返回5,然而5无法被调用,所以显示错误

 

我标注了颜色,可以理解为同一种颜色代表着相同的函数或参数, 按照生成绿色horse函数,生成橙色mask(lambda表达式)函数,调用绿色horse并传入橙色mask的顺序,我们可以知道,return horse(mask)中的橙色horse是橙色mask,也就是lambda表达式,而蓝色mask则是一个接受橙色horse并返回它的函数(接受橙色mask并返回它),所以return horse(mask)就变成了return mask(mask),第一个mask是橙色的,第二个是蓝色的,因为lambda表达式是给参数函数传入数字2,所以lambda中的紫色horse就是蓝色mask,并且蓝色mask被传入2,所以蓝色mask也输出2,橙色horse(蓝色mask) == 蓝色mask(2),所以函数horse最后返回2,值得注意的是,lambda表达式中的horse是任意参数x

decorator

  

两种用法:@<函数名>或者函数 = 函数1(函数)

@trace            square = trace(square)

用于快捷地将一个函数转变成另一个函数 ,在哪个函数加,就改变哪个函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值