为什么balance的值没有变化

为什么balance的值没有变化

import threading
import time


balance = 100



def add(n,name):
   global balance
   balance = balance + n
   print('name:  ' + name + '  is doing add, balance is ' + str(balance))
   return balance


class threadTest(threading.Thread):

   def __init__(self,number,name,*args,**kwargs):
       super().__init__(name = name,*args,**kwargs)
       self.number = number

   def run(self):
       for i in range(10):
               name = threading.current_thread().name
               n = add(self.number,name)
               print('{} add  {}  ({}):   balance:{}'.format(name,self.number,i,n))



if __name__ == '__main__':


   t = threadTest(1, 't')
   t.start()


这是代码,结果在图片里。运行完以后balance的值和左边打印出来的值完全不相符,而且手动调用函数也无法改变balance的值,但奇怪的是函数里面给出的result是正确的,那么这个值到底存在哪里? 

http://img1.sycdn.imooc.com//climg/5eee64700957947022880944.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕笑蓉 2020-06-21 15:04:54

同学,你好。老师明白同学所问的问题所在,是指打开了Show command line afterwards之后,在python的控制台里运行代码的,结果如图:

http://img1.sycdn.imooc.com//climg/5eeeffd00938361510650381.jpg

其实在右边显示的内容每次都是不固定的,因为程序运行后,再打开python交互模式,此时程序的变量因为程序的运行已经发生了改变,当交互模式完全打开后,读取到的变量是多少,就是多少,之后在交互模式下运行,结果和打开交互模式下加载的变量值保持一致,因此输入balance查找值时,值和右边显示的保持一致

关于为什么使用add后,balance的值已经发生改变,但再次调用balance的值还是没有变化,这是因为调用balance查看的内容是加载控制台时的balance变量,不是程序中的全局变量调用balance,如果想看到全局变量调用balance的值,可另外写一个方法查看,如:

http://img1.sycdn.imooc.com//climg/5eef06930915731006100608.jpg

祝学习愉快~

好帮手慕笑蓉 2020-06-21 11:30:50

同学,你好。程序运行时,操作系统会给程序分配内存,程序中涉及到的变量都放在内存里,当程序运行完后,内存被释放,变量也就不在内存了,如需要保存程序运行的值,需要写代码,将这些数据保存到文件,或者数据库里,关于文件的读写操作,老师在步骤二 · 文件读写模式中讲到了,关于数据库是阶段二的内容,同学可耐心往下学习。

如果解决了你的疑惑,请采纳,祝学习愉快~ 

  • 提问者 慕前端8369922 #1
    不太理解,那我不是只创建了一个balance这个变量么? 为什么右下角和我调用函数输出的变量值不一样? 并且右下角的值无法改变呢?
    2020-06-21 11:34:33
  • 提问者 慕前端8369922 #2
    我是在pycharm上运行这段代码的,跑完以后在Console里面仍然可以看结束之后的各种值啊? 以及可以在控制台里面输入各种代码?
    2020-06-21 11:39:06
  • 提问者 慕前端8369922 #3
    我是在设置里打开了 Show command line afterwards 所以 程序执行后会保持在 python shell 的状态,可以对程序中的数据进行调试。 也就出现了我的这个问题
    2020-06-21 11:43:16
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师