蛋小蛋 发表于 2020-4-19 10:16:38

函数内列表的赋值问题

def get(n):
    result = []
    if n >0:
      result.insert(0,n%10)
      get(n//10)
    return result
dd = get(123456)
print(dd)
结果是

另一种写法
result_1 = []
def get_1(n):
    while n:
      result_1.insert(0,n%10)
      n = n//10
    return result_1
get_1(123456)
print(result_1)
结果是
result_1 是全局变量,在函数外定义,为什么在调用函数时数值变化,
result在函数体内定义,在调用函数时,只记录了最后一个赋值,
这两种表达方式为什么不一样呢?



ba21 发表于 2020-4-19 10:23:07

运行看懂下面代码
a = []
def get():
    b = []
    a.append(1)
    b.append(1)
get()
a.append(2)
b.append(2)


import time
def get():
    while True:
      b = []
      b.append(1)
      print(b)
      time.sleep(1)
get()

麻麦皮 发表于 2020-4-19 10:36:08

本帖最后由 麻麦皮 于 2020-4-19 10:52 编辑

def get(n):
    result = []
    if n >0:
      result.insert(0,n%10)
      get(n//10)                     
    return result
dd = get(123456)
print(dd)

result_1 = []
def get_1(n):
    while n:
      result_1.insert(0,n%10)
      n = n//10
    return result_1
get_1(123456)      #返回了result_1==代替原来的result_1==[]
print(result_1)

注意:return都是全局变量

1、get(123456)里的result==,调用了get(12345),get(12345)里的result==,调用了get(1234),get(1234)里的result==...调用了get(1),get(1)里的result==
get(1)返回了result==,get(12)返回了result==取代了result==...get(123456)返回了result==取代了result==

2、第一次循环返回了result_1==,第二次循环返回了result_1==...第六次循环返回了result_1==
函数返回了全局变量result_1==,取代了原来的result_1==[]

给楼主详细分析了每个步骤了

txxcat 发表于 2020-4-19 11:26:44

def get(n):
    result = []       #递归每次调用函数,result都会被重置,所以只返回最后一次调用的值,所以这样行不通,非递归的函数倒是可以内置列表。
    if n >0:
      result.insert(0,n%10)
      get(n//10)
    return result

dd = get(123456)
print(dd)

非零即一 发表于 2020-4-19 11:37:09

厉害

蛋小蛋 发表于 2020-4-19 18:43:14

ba21 发表于 2020-4-19 10:23
运行看懂下面代码

理解了 感谢感谢

蛋小蛋 发表于 2020-4-19 18:43:57

txxcat 发表于 2020-4-19 11:26


理解了 感谢感谢

蛋小蛋 发表于 2020-4-19 18:44:30

txxcat 发表于 2020-4-19 11:26


理解了 感谢感谢

蛋小蛋 发表于 2020-4-20 10:02:06

txxcat 发表于 2020-4-19 11:26


理解了,感谢感谢!
页: [1]
查看完整版本: 函数内列表的赋值问题