配置文件的格式非常多,有ini、xml、yaml等等,各有優點,適合不同的場景。然而,由于Python語言的解釋性和動態性,給Python程序員帶來了另一個選擇:直接用Python變量作為配置文件格式,相信Python程序員更傾向于這種形式。但是,在享受便利的同時,不能忽略當中存在的不足。
用Python變量作為配置文件格式
相信大部分Python程序員都不會陌生,把配置直接用變量的形式寫到一個模塊中,在需要讀取配置的地方,直接import模塊就能得到配置變量。這得益于:
Python是解釋性語言,無需編譯,修改后的源文件直接可以運行;
Python優雅的語法,直觀的變量定義,靈活的數據類型。
配置文件示例:
<!-- lang: python --> # config.py listen_port = 4444 use_epoll = True在讀取配置的地方:
<!-- lang: python --> import config port_num = config.listen_port if config.use_epoll:一、優點
直接用python變量作為配置文件格式的優點是顯然的:
不用任何parser(解釋器)來解釋配置文件。Python解釋器本身就擔當了parser的角色。
使用自然、方便,直接可用,和其他變量的使用沒有任何區別。
學習成本低,不需要學習其他配置文件的格式和語法。
如此明顯的優勢,相信用Python編程的時候,如無特殊情況,必定會選用這種形式的配置文件。
接下來,我們說說**“特殊情況”**,什么情況下應該避免使用Python變量作為配置文件。
二、缺點
方便之處在于不用parser,缺點也在于不用parser。
通常情況,配置文件是人負責寫,程序負責讀。現在,程序讀配置文件非常方便,人寫配置文件也非常方便。
但是會不會存在這樣的情況,配置文件既要讓人寫,也要讓代碼寫。顯然,這種情況是存在的,比如:程序的配置可以直接改配置文件,同時也提供了一套界面讓用戶在界面上修改配置。在界面上修改的配置,終也是反映到配置文件中,這就要求代碼修改配置文件了。
那么,我們獲得配置文件變量的值容易,把修改后的值寫回去容易嗎?
容易:按照語法格式,變量 = 值,寫到配置文件即可。
不容易:由于沒有任何parser的支持,我們我們只知道有這個變量,知道這個變量的值,但是,不能定位到原來配置文件中變量的位置,這就限制了我們無法在原來的位置上修改,只能重新生成整個配置文件。
重新生成配置文件會帶來什么問題?
注釋丟失,我們沒法獲得配置文件的注釋,也就無法重新生成,所有注釋都將丟失。雖然不影響功能,但是用戶下次想要手動修改的時候,沒有了先前的注釋非常不方便。
變量順序混亂,在Python解釋器看來,配置文件的變量是沒有順序,但是現實中,用戶對配置變量的理解是功能相近分成“一組”,根據作用的大小、先后排出“順序”。順序混亂了,用戶想要手動修改的時候將會非常困惑。
結論
是否應該使用Python變量作為配置文件格式?取決于程序的使用場景。It depends.