例如,這裏是一個簡單的版本。模塊和函數名稱是否相同被認爲是不好的做法?
from app import VERSION
def app():
print(VERSION)
if __name__ == '__main__':
app()
這是否被認爲是不好的做法?我查看了Python的PEP風格指南,對於這種特殊情況找不到多少東西。
例如,這裏是一個簡單的版本。模塊和函數名稱是否相同被認爲是不好的做法?
from app import VERSION
def app():
print(VERSION)
if __name__ == '__main__':
app()
這是否被認爲是不好的做法?我查看了Python的PEP風格指南,對於這種特殊情況找不到多少東西。
如果使用from app import VERSION
而不是import app
,模塊和函數之間不會有名稱衝突,因此可以這樣做。
正確答案。事實上,它發生了衝突,但並未感謝VERSION的導入而不是應用程序。我建議不要使用相同的名稱,以避免這種風險。 –
不,這不是壞習慣。這樣做,是完全沒有問題,例如,如果你看python的內建命令之一,pprint.pprint():
pprint.pprint(對象,流=無,縮進= 1,寬度= 80,深度=無)
打印正在流中的對象的格式化表示,後跟換行符。如果stream爲None,則使用sys.stdout。這可以在交互式解釋器中使用,而不是用於檢查值的打印語句。縮進,寬度和深度將作爲格式化參數傳遞給PrettyPrinter構造函數。
如果python開發者這樣做,當然也可以,如果你也這樣做。只要確保避免名稱衝突。但總的來說,在這些情況下你不應該遇到問題。正如SuperbiasedMan所暗示的那樣,還有許多其他的內建工具可以完成這個工作,例如, time.time
和datetime.datetime
。
正如Apero正確指出的,我稍微誤解了你的情況。
作爲一個修復,我會強調我已經在上面說過:只要確保避免名稱衝突。
因爲你做了from app import VERSION
,所以from app
不會和你的def app
函數衝突,所以這段代碼可以正常工作。然而
我的看法是,這是不好的做法,因爲如果你因爲某些原因並不總是做具體的進口,而且還利用import app
,那麼它會發生衝突,你的代碼可以做意想不到的事情。
這不是OP的問題,即使標題可能會誤導我們。在他的情況下,該模塊是應用程序,並且他在該腳本中具有應用程序功能,如果他正在執行導入應用程序,該應用程序「可能」會發生衝突。但在他的情況下,他不是進口應用程序,而是從應用程序VERSION,所以沒關係。 –
@Apero謝謝,那是我的錯誤理解。 –
'如果python開發者這樣做,當然也可以,如果你也這樣做。「也許沒關係。也許不會。也許一個更好的問題是:它是*好的*練習而不是*壞的*練習?但是這兩個問題都可能導致非常主觀的觀點。我建議堅持儘可能多的乾淨的代碼,你可以從自己得到。有關於編寫乾淨的代碼的書籍。 – colidyre
什麼是「壞習慣」?一些不起作用的東西,可以起作用,但有潛在的副作用,可能導致誤解,或者不太好讀,...?我認爲更好的問題是:「這是否被認爲是良好的習慣......」。這是一個開發者應該去做的。 – colidyre