求助
请问零基础入门学习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要放在定义函数外,而放在定义函数里就出不来结果呢?能解释一下吗?麻烦了 因为一个是局部变量,一个是全局变量 zltzlt 发表于 2019-10-14 21:25
因为一个是局部变量,一个是全局变量
我记得小甲鱼说过对全局变量修改是不能的,除非有一个global关键字,可1题中是对全局变量进行修改了啊,但为什么结果还是对的呢?而将它放在函数里作为局部变量时,结果反而还是它本身[],这是为什么呢? John车俊林 发表于 2019-10-14 21:34
我记得小甲鱼说过对全局变量修改是不能的,除非有一个global关键字,可1题中是对全局变量进行修改了啊, ...
能在函数访问全局变量的方法和属性,但不能用赋值操作符(比如 +=、*=、=)对他进行修改。 zltzlt 发表于 2019-10-14 21:37
能在函数访问全局变量的方法和属性,但不能用赋值操作符(比如 +=、*=、=)对他进行修改。
是呀1题没有对它进行修改啊可为什么放在函数内部就不对了呢 John车俊林 发表于 2019-10-14 21:43
是呀1题没有对它进行修改啊可为什么放在函数内部就不对了呢
因为 get_digits() 用到了递归,放到函数内部导致每次递归 result 都会被清空。 zltzlt 发表于 2019-10-14 21:45
因为 get_digits() 用到了递归,放到函数内部导致每次递归 result 都会被清空。
嗯嗯我懂了因为每次都要用到,若放里面的话就重新被初始化了。而0题放里面是因为要对其进行修改 所以必须放里面 是吧? John车俊林 发表于 2019-10-14 22:06
嗯嗯我懂了因为每次都要用到,若放里面的话就重新被初始化了。而0题放里面是因为要对其进行修改 所以 ...
是的。
页:
[1]