鱼C论坛

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

[已解决]求助

[复制链接]
发表于 2019-10-14 21:17:14 | 显示全部楼层 |阅读模式

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

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

x
请问零基础入门学习Python中的第023讲和024讲的课后习题中。为什么课后习题0由十进制求2进制数,代码如下:
def Dec2Bin(dec):
    result = ''
   
    if dec:
        result = Dec2Bin(dec//2)
        return result + str(dec%2)
    else:
        return result

print(Dec2Bin(62))
为啥这里的变量result放在定义函数里就没问题。而题1中将参数n分解出每个位的数字并按顺序放到列表中的代码:
result = []
def get_digits(n):
        if n > 0:
                result.insert(0, n%10)
                get_digits(n//10)

get_digits(12345)
print(result)
它的变量result要放在定义函数外,而放在定义函数里就出不来结果呢?  能解释一下吗?麻烦了
最佳答案
2019-10-14 21:45:40
John车俊林 发表于 2019-10-14 21:43
是呀  1题没有对它进行修改啊  可为什么放在函数内部就不对了呢

因为 get_digits() 用到了递归,放到函数内部导致每次递归 result 都会被清空。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-14 21:25:43 | 显示全部楼层
因为一个是局部变量,一个是全局变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-14 21:34:58 | 显示全部楼层
zltzlt 发表于 2019-10-14 21:25
因为一个是局部变量,一个是全局变量

我记得小甲鱼说过对全局变量修改是不能的,除非有一个global关键字,可1题中是对全局变量进行修改了啊,但为什么结果还是对的呢?而将它放在函数里作为局部变量时,结果反而还是它本身[],这是为什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-14 21:37:54 | 显示全部楼层
John车俊林 发表于 2019-10-14 21:34
我记得小甲鱼说过对全局变量修改是不能的,除非有一个global关键字,可1题中是对全局变量进行修改了啊, ...

能在函数访问全局变量的方法和属性,但不能用赋值操作符(比如 +=、*=、=)对他进行修改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-14 21:43:39 | 显示全部楼层
zltzlt 发表于 2019-10-14 21:37
能在函数访问全局变量的方法和属性,但不能用赋值操作符(比如 +=、*=、=)对他进行修改。

是呀  1题没有对它进行修改啊  可为什么放在函数内部就不对了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-14 21:45:40 | 显示全部楼层    本楼为最佳答案   
John车俊林 发表于 2019-10-14 21:43
是呀  1题没有对它进行修改啊  可为什么放在函数内部就不对了呢

因为 get_digits() 用到了递归,放到函数内部导致每次递归 result 都会被清空。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-14 22:06:19 | 显示全部楼层
zltzlt 发表于 2019-10-14 21:45
因为 get_digits() 用到了递归,放到函数内部导致每次递归 result 都会被清空。

嗯嗯  我懂了  因为每次都要用到,若放里面的话就重新被初始化了。而0题放里面是因为要对其进行修改 所以必须放里面 是吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-15 19:42:14 | 显示全部楼层
John车俊林 发表于 2019-10-14 22:06
嗯嗯  我懂了  因为每次都要用到,若放里面的话就重新被初始化了。而0题放里面是因为要对其进行修改 所以 ...

是的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 13:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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