鱼C论坛

 找回密码
 立即注册
查看: 1333|回复: 9

[已解决]python 简单代码疑问

[复制链接]
发表于 2018-1-10 16:56:52 | 显示全部楼层 |阅读模式

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

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

x
第一段代码:

def Fun1():
        x = 5
        def Fun2():
                x *= x
                return x
        return Fun2()

>>> Fun1()
Traceback (most recent call last):
  File "<pyshell#34>", line 1, in <module>
    Fun1()
  File "<pyshell#33>", line 6, in Fun1
    return Fun2()
  File "<pyshell#33>", line 4, in Fun2
    x *= x
UnboundLocalError: local variable 'x' referenced before assignment



第二段代码:
>>> def Fun1():
        x = [5]
        def Fun2():
                x[0] *= x[0]
                return x[0]
        return Fun2()

>>> Fun1()
25


问题:

0. 在第一段代码中,return x 怎么理解
1. 第一段代码为什么报错
2.将第一段代码改为第二段代码为什么就好了
3. Fun1() 的括号为什么是空的,需要赋值吗
4. 在第二段代码中  x[0] *= x[0],  其中[0]代表什么意思
最佳答案
2018-1-10 17:01:37
0. 在第一段代码中,return x 怎么理解
就是返回x

1. 第一段代码为什么报错
因为x没有定义,内部函数的x覆盖了外面的x,就好比你不能没有赋值就直接 a *= a

2.将第一段代码改为第二段代码为什么就好了
形成了闭包,可以这样使用了

3. Fun1() 的括号为什么是空的,需要赋值吗
必须是空,因为函数定义的时候就是空

4. 在第二段代码中  x[0] *= x[0],  其中[0]代表什么意思
取第一个元素,因为列表x只有一个元素5,所以就是5
结果就是将x[0]赋值为5 * 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-10 17:01:37 | 显示全部楼层    本楼为最佳答案   
0. 在第一段代码中,return x 怎么理解
就是返回x

1. 第一段代码为什么报错
因为x没有定义,内部函数的x覆盖了外面的x,就好比你不能没有赋值就直接 a *= a

2.将第一段代码改为第二段代码为什么就好了
形成了闭包,可以这样使用了

3. Fun1() 的括号为什么是空的,需要赋值吗
必须是空,因为函数定义的时候就是空

4. 在第二段代码中  x[0] *= x[0],  其中[0]代表什么意思
取第一个元素,因为列表x只有一个元素5,所以就是5
结果就是将x[0]赋值为5 * 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 17:04:38 | 显示全部楼层
BngThea 发表于 2018-1-10 17:01
0. 在第一段代码中,return x 怎么理解
就是返回x

其他的都理解了,就是第0个问题,返回x是什么意思,能不能举个例老哥,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 17:06:20 | 显示全部楼层
幻影骑士 发表于 2018-1-10 17:04
其他的都理解了,就是第0个问题,返回x是什么意思,能不能举个例老哥,感谢

就是一个简单的函数返回啊,Fun2函数的返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 17:19:43 | 显示全部楼层
BngThea 发表于 2018-1-10 17:06
就是一个简单的函数返回啊,Fun2函数的返回

在第一段函数中如果把return x看作是Fun2的函数返回值为什么下面又来一个  return Fun2() 呢?
第一段代码:
def Fun1():
        x = 5
        def Fun2():
                x *= x
                return x
        return Fun2()

多谢老哥,新手,多指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 17:23:37 | 显示全部楼层
幻影骑士 发表于 2018-1-10 17:19
在第一段函数中如果把return x看作是Fun2的函数返回值为什么下面又来一个  return Fun2() 呢?
第一段代 ...

return Fun2() 是外面函数Fun1()的返回值
return x 是内部函数Fun2()的返回值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 17:34:44 | 显示全部楼层
BngThea 发表于 2018-1-10 17:23
return Fun2() 是外面函数Fun1()的返回值
return x 是内部函数Fun2()的返回值

能不能把return看做数学中的Y?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 17:38:37 | 显示全部楼层
幻影骑士 发表于 2018-1-10 17:34
能不能把return看做数学中的Y?

最后的逻辑关系是不是  
Y(x) = Fun2()
Y(Fun2()) = Fun(1)

所以最后就是 Y(x) = Fun(1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 18:44:07 From FishC Mobile | 显示全部楼层
幻影骑士 发表于 2018-1-10 17:38
最后的逻辑关系是不是  
Y(x) = Fun2()
Y(Fun2()) = Fun(1)

可以这样理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 18:49:09 | 显示全部楼层

哈哈多谢帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 05:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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