找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3781|回复: 3

[代码与实例] 请求大神告诉我这个代码哪里错了,谢谢!

1

主题

3

帖子

3

积分

贫民

积分
3
fxd1234567 发表于 2017-6-20 17:35:44 | 显示全部楼层 |阅读模式
def change(x=[6,7]): for i in range(2):
  x[0]=i
  yield x

list(change())
显示的是[[1,7],[1,7]]
求大神解释一下,我觉得这个结果不应该是[[0,7],[1,7]]才对吗?
回复

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
Simon2009 发表于 2017-6-20 20:16:50 | 显示全部楼层
我在python3环境下试没有问题
代码:
def change(x=[6,7]):
        for i in range(2):
                x[0]=i
                #print (x)
                yield x

for x in change():
        print (x)

结果:
[0, 7]
[1, 7]
[Finished in 0.1s]
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
fxd1234567  楼主| 发表于 2017-6-20 21:39:35 | 显示全部楼层
Simon2009 发表于 2017-6-20 20:16
我在python3环境下试没有问题
代码:
def change(x=[6,7]):

你讲得对,用print没问题,但是用list(change())就是不一样,你可以试试,为什么呢?
>>> for x in change():
        print(x)
[0, 7]
[1, 7]
>>> list(change())
[[1, 7], [1, 7]]
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
明前 发表于 2017-10-26 16:58:01 | 显示全部楼层
x是指针,change()函数执行后,x[0]这个位置的数据发生了更改,所以结果是这样的。如果用print的话,change()函数还没执行完,就yield一次x,这个时候打印出来的x肯定就是你[0,7]了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表