鱼C论坛

 找回密码
 立即注册
查看: 1241|回复: 13

[已解决]函数问题

[复制链接]
发表于 2018-4-6 12:14:08 | 显示全部楼层 |阅读模式

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

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

x
  1. def make_repeat():
  2.     n = 2
  3.     def mul(s):
  4.         return s * n

  5. mul = make_repeat()

  6. print(mul(8))

  7. print(mul(8))
  8. print(mul(8))
  9. print(mul(8))
复制代码



我这个程序为什么总是出错呢?
最佳答案
2018-4-6 12:58:16
金刚 发表于 2018-4-6 12:57
我就想把调用的那些全都一直乘下去,不是一直都是16,应该是第一次2*8,第二次2*8*8.可能我想的有点错误 ...

def make_repeat(s):
    n = 2
    def mul(s):
        nonlocal n
        n*=s
        return n
    return mul

mul = make_repeat(8)

print(mul(8))

print(mul(8))
print(mul(8))
print(mul(8))
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-4-6 12:21:39 | 显示全部楼层
mul本身就是NoneType,不能再传参了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-6 12:28:54 | 显示全部楼层
塔利班 发表于 2018-4-6 12:21
mul本身就是NoneType,不能再传参了

怎么让他变成不是空对象呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-6 12:35:34 From FishC Mobile | 显示全部楼层
外部函数需要return内部函数才行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-6 12:38:01 | 显示全部楼层
金刚 发表于 2018-4-6 12:28
怎么让他变成不是空对象呢?

你这里mul为什么要和里面函数名一样,不知道你要实现什么功能
mul=make_repeat
你下面就能用print(mul())
然而还没有卵用,
你想把8带入得到16,是这个意思?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-6 12:44:56 | 显示全部楼层
  1. def make_repeat(s):
  2.     n = 2
  3.     def mul(s):
  4.         return s * n
  5.     return mul(s)
  6. mul = make_repeat

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

使用道具 举报

 楼主| 发表于 2018-4-6 12:46:31 | 显示全部楼层
塔利班 发表于 2018-4-6 12:38
你这里mul为什么要和里面函数名一样,不知道你要实现什么功能
mul=make_repeat
你下面就能用print(mul( ...
  1. def funX():
  2.     x = 5
  3.     def funY():
  4.         nonlocal x
  5.         x += 1
  6.         return x
  7.     return funY

  8. a = funX()
  9. print(a())
  10. print(a())
  11. print(a())
复制代码



我就想把那个和这个函数实现一样的功能
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-6 12:47:38 | 显示全部楼层
BngThea 发表于 2018-4-6 12:35
外部函数需要return内部函数才行

还有别的方式也可以访问吧?就是fun()()这种的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-6 12:53:08 | 显示全部楼层
你是想做2*8
2*8*8
2*8*8*8?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-6 12:53:24 | 显示全部楼层
我得需要理解函数自带的参数和函数里面定义的变量到底有什么区别,我在尝试理解这两个区别呢,所以有的函数我就用我的考虑来实现他的功能。但是有时候程序出错了,我就没有及时发现问题,但是我都明白需要调用内部函数,需要返回。就是当时没发现。应该是不太熟练,或者大意的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-6 12:57:40 | 显示全部楼层
塔利班 发表于 2018-4-6 12:38
你这里mul为什么要和里面函数名一样,不知道你要实现什么功能
mul=make_repeat
你下面就能用print(mul( ...

我就想把调用的那些全都一直乘下去,不是一直都是16,应该是第一次2*8,第二次2*8*8.可能我想的有点错误,我是临时自己想出来自己实现一个功能。随便试试。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-6 12:58:16 | 显示全部楼层    本楼为最佳答案   
金刚 发表于 2018-4-6 12:57
我就想把调用的那些全都一直乘下去,不是一直都是16,应该是第一次2*8,第二次2*8*8.可能我想的有点错误 ...

def make_repeat(s):
    n = 2
    def mul(s):
        nonlocal n
        n*=s
        return n
    return mul

mul = make_repeat(8)

print(mul(8))

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

使用道具 举报

 楼主| 发表于 2018-4-6 13:12:43 | 显示全部楼层
塔利班 发表于 2018-4-6 12:53
你是想做2*8
2*8*8
2*8*8*8?

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

使用道具 举报

 楼主| 发表于 2018-4-6 13:19:52 | 显示全部楼层
塔利班 发表于 2018-4-6 12:58
def make_repeat(s):
    n = 2
    def mul(s):

谢谢。我还得要多看,多做些题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-10 05:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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