Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 常规:总是在关闭时保存设置,而不是仅在更改时保存_Python_Coding Style - Fatal编程技术网

Python 常规:总是在关闭时保存设置,而不是仅在更改时保存

Python 常规:总是在关闭时保存设置,而不是仅在更改时保存,python,coding-style,Python,Coding Style,我正在测试一个小型python应用程序——每当该应用程序关闭时,设置都会被保存,即使我没有做任何更改。我想知道这是否是一般做法-听起来似乎只有在进行更改时才应该保存设置,但是否有原因(除了降低复杂性外)pro保存设置总是处于关闭状态?如果您的应用程序使用例如,如果在关闭过程中出现以下情况,您将重写文件: with open('example.ini', 'w') as configfile: config.write(configfile) 如果您不做任何更改,这与以前没有什么不同。我认为

我正在测试一个小型python应用程序——每当该应用程序关闭时,设置都会被保存,即使我没有做任何更改。我想知道这是否是一般做法-听起来似乎只有在进行更改时才应该保存设置,但是否有原因(除了降低复杂性外)pro保存设置总是处于关闭状态?

如果您的应用程序使用例如,如果在关闭过程中出现以下情况,您将重写文件:

with open('example.ini', 'w') as configfile:
  config.write(configfile)

如果您不做任何更改,这与以前没有什么不同。

我认为这甚至与python无关。通常情况下,您会遇到如下情况:

  • 从文件加载设置
  • 使用并可能修改内存中的设置
  • 将设置写入文件
  • 检测到设置修改将在2(保持“已更改”状态)或3(与当前持久化设置不同)中引入更改

    第一个解决方案的开销很小(可以是一个布尔值),但它仍然是开销,并且它处于程序的“活动”状态(而不是启动/关闭)。此外,可能出错的还有其他逻辑(例如,在副本上意外地将布尔值重置为false)

    第二种解决方案有很大的开销,因为您必须加载一个文件,并区分所有设置。与简单的“覆盖”相比,这实际上会大大降低代码的速度

    最后,您只需在关机时保存一个文件,而这通常不是应用程序中最关键的部分。如果没有任何更改,您只需重写相同的文件


    因此,我不会这样做,除非存储文件非常复杂/缓慢,或者您确实不希望更改文件的“修改时间”,除非您实际更改了设置。但这些情况对我来说似乎相当特殊。

    如果您的程序在以
    'w'
    模式打开文件后失败,但在完全写入文件之前,您将得到一个部分写入的文件。解决这个问题的唯一方法是写入一个temp;fsync临时和重命名。该文件的修改时间将更改-这听起来很糟糕-我发现在实际更改设置时更改它更整洁-设置在.dat文件中btw@Mr_:是的,听起来很糟糕,但还不算太糟。如果修复或不修复是一个问题,我认为答案取决于程序的复杂程度:如果(a)非常简单,那么我会保持原样,(b)非常复杂:我会小心,以免弄坏它,(c)是一个中型项目,无用的重写困扰着我,我可能会写一些修改标志sysyem.Hmm-我真的不关心文件的编写-我关心的是设置文件的修改时间的变化-似乎更整洁,在实际更改中有这个变化-+一些dat文件约30 MB显示关于存储dat文件的crc如果crc改变或不改变,关闭时是否覆盖?