鱼C论坛

 找回密码
 立即注册
查看: 2509|回复: 7

[已解决]lambda

[复制链接]
发表于 2020-2-14 12:47:41 | 显示全部楼层 |阅读模式

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

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

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

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


为啥答案是这个啊
16
FishCFishC

s 跑哪去了
最佳答案
2020-2-14 13:43:16
学python啊嘿哈 发表于 2020-2-14 13:25
为啥s是FishC
还有就是写成make_repeat(2)(8)以后 是不是要把16带入最开始的程序:
def make_repeat(n) ...

s 在程序中已经赋值成了fishc.
print(double('FishC'))
这里的fishc 就是s的赋值结果
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-14 12:50:58 | 显示全部楼层
s就是FishC
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-14 12:53:29 | 显示全部楼层
  1. double = make_repeat(2)
  2. print(double(8))
  3. print(double('FishC'))
复制代码

可以这么写:
  1. make_repeat(2)(8)
  2. make_repeat(2)("FishC")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-14 13:25:41 | 显示全部楼层

为啥s是FishC
还有就是写成make_repeat(2)(8)以后 是不是要把16带入最开始的程序:
def make_repeat(n):
        return lambda s : s * n
为什么s就没有了呢 答案就只是16
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-14 13:43:16 | 显示全部楼层    本楼为最佳答案   
学python啊嘿哈 发表于 2020-2-14 13:25
为啥s是FishC
还有就是写成make_repeat(2)(8)以后 是不是要把16带入最开始的程序:
def make_repeat(n) ...

s 在程序中已经赋值成了fishc.
print(double('FishC'))
这里的fishc 就是s的赋值结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-14 14:14:57 | 显示全部楼层
学python啊嘿哈 发表于 2020-2-14 13:25
为啥s是FishC
还有就是写成make_repeat(2)(8)以后 是不是要把16带入最开始的程序:
def make_repeat(n) ...

make_repeat() 是返回一个函数,它接收一个参数 s。make_repeat(2)(8),n 是 2,s 是 8。

double() 函数相当于:

  1. def double(s):
  2.     return s * n
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-14 14:15:17 From FishC Mobile | 显示全部楼层
s是变量,你带入参数后s的值就是'FishC'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-14 18:02:39 | 显示全部楼层
学python啊嘿哈 发表于 2020-2-14 13:25
为啥s是FishC
还有就是写成make_repeat(2)(8)以后 是不是要把16带入最开始的程序:
def make_repeat(n) ...

用函数type()看一波double 的类型,会发现它仍然是个函数
  1. type(double)
  2. <class 'function'>
复制代码

其实double = s * 2
如果 s 是数字,* 号在这里表示相乘的意思,所以print(double(8))是16
如果 s 是字符串,那么 * 号就是重复操作符,print(字符串 * 整数)不就是把字符串打印那个整数次吗
s 在 lambda表达式那个冒号左边,就是这个匿名函数的形参呗,下来的操作就是给这个匿名函数贴一个标签‘double',double('FishC')是在调用这个函数,就是把实参’FishC'赋给了形参‘s',所以s不见了。
同属小白,我也刚看完这个视频,不知道说的对不对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-11 11:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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