关于函数中列表的问题,各位大哥教教小弟
本帖最后由 rplt 于 2021-10-7 18:55 编辑def main():
ist=
Reverse(ist)
for i in ist:
print(i,end=' ')
def Reverse(ist):
newlist=*len(ist)
for i in range(len(ist)):
newlist=ist
ist=newlist
main()
小弟的理解是,经过ist=newlist之后 ist与newlist 都同时指向了 列表是可以通过函数改变的吧,那在main函数里输出ist的时候也应该是
但在PYTHON3 上输出的是 def main():
ist=
Reverse(ist)
for i in ist:
print(i,end=' ')
def Reverse(ist):
newlist=*len(ist)
for i in range(len(ist)):
newlist=ist
ist[:]=newlist
main() 你的代码牵连局部变量问题,跟列表指向地址无关,不同函数内部也就不同局部(变量可以用相同名字,但完全不同地址,除非在函数外面定义全局变量!)
def main():
arr =
def reverse():
nonlocal arr
arr = arr[::-1]
reverse()
print(*arr)
main() 傻眼貓咪 发表于 2021-10-7 18:18
你的代码牵连局部变量问题,跟列表指向地址无关,不同函数内部也就不同局部(变量可以用相同名字,但完全不 ...
哥你的意思是,这个在函数里创建的newlist只是个局部变量,函数结束后就消失了,所以输出的还是【1,2,3,4,5】是吧? kogawananari 发表于 2021-10-7 16:45
def main():
ist=
Reverse(ist)
哥 这个是书上的,我就想知道 为什么不会输出 rplt 发表于 2021-10-7 18:58
哥 这个是书上的,我就想知道 为什么不会输出
我不知道你说的什么书 我只是给你改成符合你预期的样子了 kogawananari 发表于 2021-10-7 19:26
我不知道你说的什么书 我只是给你改成符合你预期的样子了
列表是可以通过函数改变的 这是对的
但是ist=newlist没有修改列表
切片赋值才是修改列表 本帖最后由 傻眼貓咪 于 2021-10-7 19:59 编辑
rplt 发表于 2021-10-7 18:57
哥你的意思是,这个在函数里创建的newlist只是个局部变量,函数结束后就消失了,所以输出的还是【1,2,3 ...
你的代码:ist 和 newlist 都是局部变量
函数 Reverse() 中的参数 ist 只取 ist 的值,不是 ist 地址,所以 main() 和 Reverse() 里面的 ist 列表名字虽然一样,但是地址完全不一样
你想用函数改变列表值如:arr = # 这是全局变量(因为在函数外面)
def main():
arr.append(13) # 因为 arr 已经定义全局变量了,所以这里 arr 就是全局变量
main()
print(arr) kogawananari 发表于 2021-10-7 19:29
列表是可以通过函数改变的 这是对的
但是ist=newlist没有修改列表
切片赋值才是修改列表
懂了谢谢哥 傻眼貓咪 发表于 2021-10-7 19:53
你的代码:ist 和 newlist 都是局部变量
函数 Reverse() 中的参数 ist 只取 ist 的值,不是 ist 地址 ...
{:5_100:}悟了悟了,也就是这个程序最终输出的只是main函数的ist,所以输出结果是,而不是输出的是Reverse里的ist. 本帖最后由 Stubborn 于 2021-10-7 23:29 编辑
你理解错误的一点
在Reverse函数中,ist变量只是一个“标签”,这个标签告诉派森,我是“贴”在什么数据上面的。
如果你需要改里面的数据,应该是通过这边标签去找数据。比如你直接对ist变量操作,是可以影响到mian函数传递的列表。
而不是把这个“标签”贴到其他的数据上:ist=newlist
这个是Reverse函数运行ist=newlist操作前的内存分布
这个是Reverse函数运行ist=newlist操作后的内存分布
你可以很明显的看到,在运行前,ist标签还是指向mian函数的列表空间,但是执行后就没有了,因为你把ist标签重新“贴地方”了 Stubborn 发表于 2021-10-7 23:25
你理解错误的一点
在Reverse函数中,ist变量只是一个“标签”,这个标签告诉派森,我是“贴”在什么数据上 ...
感谢大哥的解答 讲透了{:10_250:}
页:
[1]