2015-09-22 98 views
2

例如,這裏是一個簡單的版本。模塊和函數名稱是否相同被認爲是不好的做法?

from app import VERSION 

def app(): 
    print(VERSION) 

if __name__ == '__main__': 
    app() 

這是否被認爲是不好的做法?我查看了Python的PEP風格指南,對於這種特殊情況找不到多少東西。

+0

什麼是「壞習慣」?一些不起作用的東西,可以起作用,但有潛在的副作用,可能導致誤解,或者不太好讀,...?我認爲更好的問題是:「這是否被認爲是良好的習慣......」。這是一個開發者應該去做的。 – colidyre

回答

4

如果使用from app import VERSION而不是import app,模塊和函數之間不會有名稱衝突,因此可以這樣做。

+0

正確答案。事實上,它發生了衝突,但並未感謝VERSION的導入而不是應用程序。我建議不要使用相同的名稱,以避免這種風險。 –

3

不,這不是壞習慣。這樣做,是完全沒有問題,例如,如果你看python的內建命令之一,pprint.pprint()

pprint.pprint(對象,流=無,縮進= 1,寬度= 80,深度=無)

打印正在流中的對象的格式化表示,後跟換行符。如果stream爲None,則使用sys.stdout。這可以在交互式解釋器中使用,而不是用於檢查值的打印語句。縮進,寬度和深度將作爲格式化參數傳遞給PrettyPrinter構造函數。

如果python開發者這樣做,當然也可以,如果你也這樣做。只要確保避免名稱衝突。但總的來說,在這些情況下你不應該遇到問題。正如SuperbiasedMan所暗示的那樣,還有許多其他的內建工具可以完成這個工作,例如, time.timedatetime.datetime


正如Apero正確指出的,我稍微誤解了你的情況。

作爲一個修復,我會強調我已經在上面說過:只要確保避免名稱衝突

因爲你做了from app import VERSION,所以from app不會和你的def app函數衝突,所以這段代碼可以正常工作。然而

我的看法是,這是不好的做法,因爲如果你因爲某些原因並不總是做具體的進口,而且還利用import app,那麼它會發生衝突,你的代碼可以做意想不到的事情。

+1

這不是OP的問題,即使標題可能會誤導我們。在他的情況下,該模塊是應用程序,並且他在該腳本中具有應用程序功能,如果他正在執行導入應用程序,該應用程序「可能」會發生衝突。但在他的情況下,他不是進口應用程序,而是從應用程序VERSION,所以沒關係。 –

+0

@Apero謝謝,那是我的錯誤理解。 –

+0

'如果python開發者這樣做,當然也可以,如果你也這樣做。「也許沒關係。也許不會。也許一個更好的問題是:它是*好的*練習而不是*壞的*練習?但是這兩個問題都可能導致非常主觀的觀點。我建議堅持儘可能多的乾淨的代碼,你可以從自己得到。有關於編寫乾淨的代碼的書籍。 – colidyre

相關問題