使用它时覆盖python文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用它时覆盖python文件?相关的知识,希望对你有一定的参考价值。

我有第一个文件(data.py):

database = {
    'school': 2,
    'class': 3
}

我的第二个python文件(app.py)

import data
del data.database['school']
print(data.database)
>>>{'class': 3}

但是在data.py中没有改变什么?为什么?我怎样才能从app.py中更改它?

答案

详细说明Gelineau的答案:在运行时,您的源代码将转换为机器可用的表示(称为“字节码”),该表示被加载到进程内存中,然后执行。当执行del data.database['school']语句(以它的字节码形式)时,它只修改内存中的data.database对象,而不是(希望!)源代码本身。实际上,您的源代码不是“程序”,它是运行时进程的蓝图。

您正在寻找的是数据持久性(数据“记住”它在程序执行之间的最后已知状态)。这个问题有很多解决方案,从简单的“将其写入文本或二进制文件并在启动时重新读取”​​到完整的多服务器数据库系统。哪种解决方案适合您,取决于您的程序需求和约束,是否需要处理并发访问(多个用户/进程同时编辑数据)等等,因此实际上没有一个适合所有人的答案。对于最简单的用例(单用户,小数据集等),写入磁盘的jsoncsv文件或简单的二进制密钥:值文件格式如anydbmshelve(都在Python的stdlib中)就足够了。一旦事情变得有点复杂,SQL数据库通常是您最好的选择(难怪它们仍然是行业标准,并且将长期存在)。

在所有情况下,数据持久性都不是“自动的”,您必须编写相当多的代码以确保及时保存更改。

另一答案

del data.database['school']修改内存中的数据,但不修改源代码。

修改源代码以管理数据的持久性不是一个好习惯恕我直言。

你可以使用数据库,csv文件,json文件......

另一答案

正如您要实现的目标基本上与文件操作有关。因此,当您导入数据时,它只是将文件的instanc加载到内存中,并从新文件创建引用,即。 app.py.所以,如果你在app.py中修改它只是修改RAM中的实例而不是硬盘中的实例,你的实际文件存储在硬盘中。

如果要更改另一个文件的源代码“作为不好的做法”,那么您可以使用文件操作。

以上是关于使用它时覆盖python文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用 cython 在图上执行框覆盖

片段覆盖整个android编辑屏幕

使用 Python 代码片段编写 LaTeX 文档

python常用代码片段总结

常用python日期日志获取内容循环的代码片段

片段布局不覆盖整个屏幕