斯特朗Master 2021-03-15 16:35 采纳率: 100%
浏览 247
已采纳

python【变量在循环外】和【变量在循环内】的输出效果为什么不一样?

在阅读《图灵程序设计丛书.Python编程_从入门到实践》P93-P95时;

遇到变量在for循环外和循环内导致最终的输出效果不一样,一直不太理解。

请注意加粗字体的部分描述。

 

【变量在for循环内】

# 创建一个用于存储外星人的空列表;

aliens = []

# 创建N个绿色的外星人列表,每个列表元素都是相同的字典.

for alien_number in range (0,10):

    # 创建字典new_alien,变量new_alien在【循环内】

    new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}

    aliens.append(new_alien)

# 输出列表核实N个元素全部都是字典

print(aliens)

print('-----------------------------\n')

# 编写了一条if语句来确保只修改绿色外星人

for alien in aliens[0:3]:

    if alien['color'] == 'green':

        alien['color'] = 'yellow'

        alien['speed'] = 'medium'

        alien['points'] = 10

print("aliens[2] : " + str(aliens[2]))

print("aliens[4] : " + str(aliens[4]))

print('\n')

# 显示前五个外星人

for alien in aliens[:5]:

    print(alien)    

print('...')

print('')

# 显示创建了多少个外星人

print("Total number of aliens: " + str(len(aliens)))

输出效果:

 

【变量在for循环内】

# 创建一个用于存储外星人的空列表

aliens = []

# 变量在【循环外】

new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}

# 创建30个绿色的外星人,引用循环外的变量new_alien

for alien_number in range (0,10):    

    aliens.append(new_alien)

# 列表切片输出

print(aliens)

print('')

# 遍历列表切片【但是,为什么输出效果等同于遍历整个列表】?

for alien in aliens[0:3]:

    if alien['color'] == 'green':

        alien['color'] = 'yellow'

        alien['speed'] = 'medium'

        alien['points'] = 10

# 显示前五个外星人

for alien in aliens[0:5]:

    print(alien)

输出效果:

问题:

当引用循环外的变量new_alien时,为什么 - - - 

for alien in aliens[0:3] 的输出为什么等同于for alien in aliens:

  • 写回答

3条回答 默认 最新

  • liqiang94 2021-03-15 16:57
    关注
    for alien_number in range (0,10):
    
        # 创建字典new_alien,变量new_alien在【循环内】
    
        new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
        print(id(new_alien))  # 每个外星人只是值相同,改变某个外星人属性不影响其他的

    当new_alien变量在循环内时,你是创建了十个不同的对象(内存位置不同),当new_alien在循环外时,你是把一个外星人添加了十次。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。