John车俊林 发表于 2019-10-14 21:17:14

求助

请问零基础入门学习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:43

因为一个是局部变量,一个是全局变量

John车俊林 发表于 2019-10-14 21:34:58

zltzlt 发表于 2019-10-14 21:25
因为一个是局部变量,一个是全局变量

我记得小甲鱼说过对全局变量修改是不能的,除非有一个global关键字,可1题中是对全局变量进行修改了啊,但为什么结果还是对的呢?而将它放在函数里作为局部变量时,结果反而还是它本身[],这是为什么呢?

zltzlt 发表于 2019-10-14 21:37:54

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

能在函数访问全局变量的方法和属性,但不能用赋值操作符(比如 +=、*=、=)对他进行修改。

John车俊林 发表于 2019-10-14 21:43:39

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

是呀1题没有对它进行修改啊可为什么放在函数内部就不对了呢

zltzlt 发表于 2019-10-14 21:45:40

John车俊林 发表于 2019-10-14 21:43
是呀1题没有对它进行修改啊可为什么放在函数内部就不对了呢

因为 get_digits() 用到了递归,放到函数内部导致每次递归 result 都会被清空。

John车俊林 发表于 2019-10-14 22:06:19

zltzlt 发表于 2019-10-14 21:45
因为 get_digits() 用到了递归,放到函数内部导致每次递归 result 都会被清空。

嗯嗯我懂了因为每次都要用到,若放里面的话就重新被初始化了。而0题放里面是因为要对其进行修改 所以必须放里面 是吧?

zltzlt 发表于 2019-10-15 19:42:14

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

是的。
页: [1]
查看完整版本: 求助