设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 10074|回复: 4
打印 上一主题 下一主题

大神请进!函数执行顺序的问题!困扰很久了!

[复制链接]

6

主题

0

好友

116

积分

注册会员

Rank: 2

跳转到指定楼层
楼主
发表于 2018-10-24 22:06:21 |只看该作者 |倒序浏览
第一个:
li = [x for x in range(3)]
print(li)

li1 = []
for ii in range(3):
    li2 = []
    for i in li:
        li2.append(i)
    li1.append(li2)
print(li1)
output : [0, 1, 2][[0, 1, 2], [0, 1, 2], [0, 1, 2]] 非常清晰
第二个
li = [x for x in range(3)]
print(li)

li1 = []
for ii in range(3):
    li2 = []
    for i in li:
        li2.append(i)
        li1.append(li2)
print(li1)
outpu:[0, 1, 2][[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
我想象中的输出应该是: [[0, ], [0, 1, ], [0, 1,2], [0,], [0, 1,], [0, 1, 2], [0,], [0, 1,], [0, 1, 2]]请问为什么 li1.append(li2)  这条命令是在li2 变成 [0, 1, 2] 之后才开始执行的呢?

回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2018-10-26 00:59:11 |只看该作者
因为你添加的是 li2 这个引用。
并不是执行顺序的问题,你把print加到你append的位置,一样可以看到变化

但你3次添加的都是同一个东西,然后你最后才print,当然都是0 1 2 了

看看这篇 http://bbs.crossincode.com/forum.php?mod=viewthread&tid=6632
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

6

主题

0

好友

116

积分

注册会员

Rank: 2

板凳
发表于 2018-11-6 00:53:41 |只看该作者
谢谢老师!
回复

使用道具 举报

6

主题

0

好友

116

积分

注册会员

Rank: 2

地板
发表于 2018-11-6 01:39:33 |只看该作者
crossin先生 发表于 2018-10-26 00:59
因为你添加的是 li2 这个引用。
并不是执行顺序的问题,你把print加到你append的位置,一样可以看到变化

crossin 老师, 不知道我这样理解是不是对的: li1.append(li2)之中的li2只是一个标签,它的对象从[0] 变到 [0, 1] 到[0, 1, 2], 所以每轮循环最终[li2, li2, li2] 就变成3个[0, 1, 2]
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2018-11-6 16:03:30 |只看该作者
pylearner 发表于 2018-11-6 01:39
crossin 老师, 不知道我这样理解是不是对的: li1.append(li2)之中的li2只是一个标签,它的对象从[0] 变 ...

是,可以这么理解
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-20 03:07 , Processed in 0.026033 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部