|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
举例:get_digits(12345) ==> [1, 2, 3, 4, 5]
小甲鱼课后答案:
result = []
def get_digits(n):
if n > 0:
result.insert(0, n%10)
get_digits(n//10)
get_digits(12345)
print(result)
想问一下,为什么不能写成如下代码(萌新提问,求大神尽量细致点解答,谢谢)
def get_digits(n):
result = []
if n > 0:
result.insert(0, n % 10)
get_digits(n // 10)
return result
print(get_digits(12345))
Python 的屏蔽机制:
当函数内部的变量和函数外部全局作用域的变量名相同时,会触发 Python 的屏蔽机制,函数内部会创建一个同名的局部变量
来暂时覆盖同名的全局变量,此时在函数内部的值都为这个局部变量,只要一出此函数,那么该局部变量就不复存在,变会原来的全局变量
所以你每次递归都算重新赋值,而且变量名相同就会触发屏蔽机制,导致你 insert 的列表永远不是同一个 ,你可以通过 return 加上递归后的列表来解决这个问题:
- def get_digits(n):
- result = []
- if n > 0:
- result.insert(0, n % 10)
- return get_digits(n // 10) + result
- else:
- return []
- print(get_digits(12345))
复制代码
|
|