鱼C论坛

 找回密码
 立即注册
查看: 2305|回复: 3

[已解决]py文件里的变量值已经改变了,为什么再导入后变量值无法改变

[复制链接]
发表于 2019-12-11 21:05:28 | 显示全部楼层 |阅读模式
20鱼币
下面的代码,请问有什么办法让第二次导入后的变量值为82吗?谢谢

  1. f = open('b.py','w')
  2. f.write('a = 12')
  3. f.close()
  4. from b import a
  5. print(a)

  6. f = open('b.py','w')
  7. f.write('a = 86')
  8. f.close()
  9. from b import a
  10. print(a)
复制代码
最佳答案
2019-12-11 21:05:29
再次导入模块,不会重新读取,直接从内存中获得。
可以使用reload重新读取模块,但又有一个新问题,模块在第一次读取时会编译成pyc文件,再修改b.py,b.pyc文件不会改变。因此还需强制不生成pyc文件。
  1. import sys
  2. sys.dont_write_bytecode = True
  3. import importlib
  4. f = open('b.py','w')
  5. f.write('a = 12')
  6. f.close()
  7. import b
  8. print(b.a)
  9. f = open('b.py','w')
  10. f.write('a = 86')
  11. f.close()
  12. importlib.reload(b)
  13. print(b.a)
复制代码

最佳答案

查看完整内容

再次导入模块,不会重新读取,直接从内存中获得。 可以使用reload重新读取模块,但又有一个新问题,模块在第一次读取时会编译成pyc文件,再修改b.py,b.pyc文件不会改变。因此还需强制不生成pyc文件。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-11 21:05:29 | 显示全部楼层    本楼为最佳答案   
再次导入模块,不会重新读取,直接从内存中获得。
可以使用reload重新读取模块,但又有一个新问题,模块在第一次读取时会编译成pyc文件,再修改b.py,b.pyc文件不会改变。因此还需强制不生成pyc文件。
  1. import sys
  2. sys.dont_write_bytecode = True
  3. import importlib
  4. f = open('b.py','w')
  5. f.write('a = 12')
  6. f.close()
  7. import b
  8. print(b.a)
  9. f = open('b.py','w')
  10. f.write('a = 86')
  11. f.close()
  12. importlib.reload(b)
  13. print(b.a)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-11 21:15:37 | 显示全部楼层
重复导入了 b。程序把第一次导入的 b 存到一个空间里,第二次导入就从原来的 b 导入。所以导入的 a 不会发生变化。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-11 22:00:50 | 显示全部楼层
注解 出于效率的考虑,每个模块在每个解释器会话中只被导入一次。
因此,如果你更改了你的模块,则必须重新启动解释器,
或者,如果它只是一个要交互式地测试的模块,请使用 importlib.reload(),
例如
import importlib
importlib.reload(modulename)

QQ浏览器截图20191211215918.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-22 03:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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