鱼C论坛

 找回密码
 立即注册
查看: 1658|回复: 25

[已解决]分别把lambda函数变为普通函数,把make_repeat(n)函数变为lambda函数

[复制链接]
发表于 2021-9-5 18:00:36 | 显示全部楼层 |阅读模式

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

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

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

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

把lambda函数变为普通函数如下:
def make_repeat(n):
    def sn(s):
        return s * n

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

Traceback (most recent call last):
  File "C:/Users/Desktop/作业/67.py", line 6, in <module>
    print(double(8))
TypeError: 'NoneType' object is not callable
为何会报错?

把make_repeat(n)函数变为lambda函数如下:
lambda n:   
    return lambda s : s * n

double = make_repeat(2)
print(double(8))
print(double('FishC'))   
不能run
最佳答案
2021-9-5 19:03:42
本帖最后由 suchocolate 于 2021-9-5 19:08 编辑
  1. # lambda函数
  2. def make_repeat(n=1):
  3.     return lambda n : n * 2

  4. double = make_repeat()
  5. print(double(8))
  6. print(double('FishC'))


  7. # lambda函数:高效
  8. double = lambda n : n * 2
  9. print(double(8))
  10. print(double('FishC'))



  11. # 普通函数
  12. def make_repeat(n):
  13.     return n * 2
  14. print(make_repeat(8))
  15. print(make_repeat('FishC'))

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-5 19:01:07 | 显示全部楼层
你make_repeat都没返回值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-5 19:03:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2021-9-5 19:08 编辑
  1. # lambda函数
  2. def make_repeat(n=1):
  3.     return lambda n : n * 2

  4. double = make_repeat()
  5. print(double(8))
  6. print(double('FishC'))


  7. # lambda函数:高效
  8. double = lambda n : n * 2
  9. print(double(8))
  10. print(double('FishC'))



  11. # 普通函数
  12. def make_repeat(n):
  13.     return n * 2
  14. print(make_repeat(8))
  15. print(make_repeat('FishC'))

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 20:49:01 | 显示全部楼层
kogawananari 发表于 2021-9-5 19:01
你make_repeat都没返回值

make_repeat是没有返回值,但是内嵌函数有返回值的,why?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 21:14:22 | 显示全部楼层
  1. def make_repeat(n=1):
  2.     return lambda n : n * 2

  3. double = make_repeat()
  4. print(double(8))
  5. print(double('FishC'))
复制代码

double(8)=make_repeat()(8)= make_repeat(n=1)(8)=lambda 8:8 * 2=16
默认参数是1,为啥make_repeat函数的参数和lambda函数的参数都是n这个变量,为什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 21:39:05 | 显示全部楼层

我写的普通函数:
  1. def make_repeat(n):
  2.     def sn(s):
  3.         return s * n
  4.     return sn

  5. double = make_repeat(2)
  6. print(double(8))
  7. print(double('FishC'))  
复制代码

还行吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 21:48:28 | 显示全部楼层

我修改的lambda函数的过程:
  1. def make_repeat(n):
  2.         return lambda s : s * n
  3. double = make_repeat(2) = lambda s: s * 2
  4. print(double(8))
  5. print(double('FishC')
复制代码

              ||
              \/
double = lambda s : s * 2
print(double(8))
print(double('FishC'))

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-5 21:50:50 | 显示全部楼层
Boibot 发表于 2021-9-5 21:14
double(8)=make_repeat()(8)= make_repeat(n=1)(8)=lambda 8:8 * 2=16
默认参数是1,为啥make_repeat ...

1)默认是多少都行,只是为了防止没有代入参数报错。
2)是什么字母都行,没有特定要求。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 22:14:40 | 显示全部楼层

这是我修改make_repeat函数为普通函数的过程:下面有几处为什么报错?
  1. def make_repeat(n):
  2.     def sn(s):
  3.         return s * n
  4.     return sn

  5. double = make_repeat(2) = return s * 2
  6. print(double(8))
  7. print(double('FishC'))  推导过程

  8. def make_repeat(n):
  9.     return s * n
  10. n = 2
  11. print(make_repeat(n)(8))
  12. print(make_repeat(n)('FishC')) error

  13. def make_repeat(n)(s):   
  14.     return s * n
  15. n = 2
  16. print(make_repeat(n)(8))
  17. print(make_repeat(n)('FishC')) error


  18. def make_repeat(n,s):   
  19.     return s * n
  20. n = 2
  21. print(make_repeat(n,8))
  22. print(make_repeat(n,'FishC'))  right


  23. def make_repeat(n=2,s):   
  24.     return s * n
  25. print(make_repeat(n,8))
  26. print(make_repeat(n,'FishC'))  error


  27. def make_repeat(s):   
  28.     return s * 2
  29. print(make_repeat(8))
  30. print(make_repeat('FishC'))    right
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 22:16:31 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-5 22:17:02 | 显示全部楼层
自己顶自己
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 22:20:07 | 显示全部楼层
suchocolate 发表于 2021-9-5 21:50
1)默认是多少都行,只是为了防止没有代入参数报错。
2)是什么字母都行,没有特定要求。

我试了不加默认参数也可以正常运行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-5 22:58:04 | 显示全部楼层
本帖最后由 suchocolate 于 2021-9-5 23:00 编辑
Boibot 发表于 2021-9-5 22:14
这是我修改make_repeat函数为普通函数的过程:下面有几处为什么报错?


第6行,return是函数内使用的语句,不能用于普通赋值运算。
建议你仔细学一下函数基础,再去练习这道题。
https://www.runoob.com/python3/python3-function.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-5 23:03:26 | 显示全部楼层
Boibot 发表于 2021-9-5 22:20
我试了不加默认参数也可以正常运行

Screenshot 2021-09-05 230251.jpg
你确定?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 23:12:22 | 显示全部楼层

我说的是这:
  1. def make_repeat(s):   
  2.     return s * 2
  3. print(make_repeat(8))
  4. print(make_repeat('FishC'))
复制代码


doublt = make_repeat()这里面的2是默认参数?实参吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-5 23:13:51 From FishC Mobile | 显示全部楼层
路过,打酱油
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 23:14:18 | 显示全部楼层
suchocolate 发表于 2021-9-5 22:58
第6行,return是函数内使用的语句,不能用于普通赋值运算。
建议你仔细学一下函数基础,再去练习这道 ...

第6行,我知道,那是我推导的过程,草稿
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-5 23:14:40 | 显示全部楼层


2不是参数,是函数中的常量。
s是函数的形式参数。
运算时传入的8和FishC是实际参数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-5 23:15:38 | 显示全部楼层
Boibot 发表于 2021-9-5 23:14
第6行,我知道,那是我推导的过程,草稿

那请把你报错的代码贴出来,别贴草稿好吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 23:29:34 | 显示全部楼层
10-14行,s没赋值报错,函数的参数不能用2个括号
16-20行,函数的参数不能用2个括号
30-33行为什么报错?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-19 06:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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