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