Discuss / Python / 有个疑问,

有个疑问,

Topic source

丁瑞同学

#1 Created at ... [Delete] [Delete and Lock User]
name = ['micheal','bob','jack']
for name in name:
   print(name)
print(name)
print(name[0])

我发现这样竟然也可以,输出结果为

micheal
bob
jack
j

想问下Python是怎么分辨name的。为什么最后输出name的值是jack,而不是['micheal','bob','jack']

丁瑞同学

#2 Created at ... [Delete] [Delete and Lock User]

输出写错了,少写了个jack,正确输出是:

micheal
bob
jack
jack
j

LEON-CITIC

#3 Created at ... [Delete] [Delete and Lock User]

我觉得是for循环的过程就是不断给变量赋值的过程,将变量name不断的赋值为列表中的值,当你循环运行结束后,变量name的值就赋值为了循环结束时的赋值,也就是jack。 所以你print变量name就是jack。 至于你print(name[0])得出的结果是j是因为python把字符串本身就看成是一个列表。我看书上貌似是有这么说过,不知道是不是这个道理,你可以往这个方向上查查资料。

小匡吉匡

#4 Created at ... [Delete] [Delete and Lock User]

个人觉得这是一变量链接的问题,从你的代码中看出,你首先创建了一名为name的list,与此同时,在for...in...循环中同样存在name变量,此时的name变量并非由内存再次创建,而就是前面的name变量,也就是说,代码全过程只用到这一个name变量,区别在于for...in...循环中变换了name的链接,由链接到list变换到链接至list中的一个元素,直至for...in...循环的终止,name链接到list中的最后一个元素。因而,print(name)是对应的是Jack,而在print(name[0])中,name所链接到Jack作为字符组构成list,因而输出Jack的第一个元素J。


  • 1

Reply