2013-07-12 83 views
3

我知道爲「腳本樣式」的python程序定義main()方法是一種很好的方式,所以它可以隨後作爲模塊加入。if __name__ ==「__main__」沒有額外的縮進:

讓我們假設這個代碼(隨機段):

a = 5 
if a > 0: 
    print a 

成爲

def main(): 
    a = 5 
    if a > 0: 
     print a 

if __name__ == "__main__": 
    main() 

導致我所有的代碼縮進一個多水平。 我儘量避免在我的代碼中出現不必要的縮進/嵌套以獲得最大的清晰度,因此我在想,是否可以在這裏完成某些操作,例如,

if __name__ != "__main__": 
    return # just leave this file 

a = 5 
if a > 0: 
    print a 

但(當然)這觸發:

SyntaxError: 'return' outside function 

是這樣的可能嗎?建議?地道?

+0

「我儘量避免不必要的縮進以獲得最大的清晰度」 - 爲了最大限度地清晰起見,您可以將相當大的腳本分解爲函數。另外,如果你所有的文件都應該這樣做,你就不需要使用'if __name__ =='__main __「'檢查,就像一個獨立的腳本一樣。在這些情況下使用它主要是爲了澄清腳本的流程,並且如果它應該被導入到某處,可以防止無意的副作用。只要您知道自己在做什麼(例如,不考慮副作用而不導入它),您就可以自由地不使用它。 – l4mpi

回答

3

不,不可能,真的。

__name__'__main__'你的模塊是由另一段代碼進口的,作爲一個普通的模塊。在這種情況下你不能早日退出。

一次有什麼問題額外的縮進級別?只需點擊編輯器中的選項卡,並完成它?就我個人而言,我發現使用main()函數比將代碼隱藏起來要好得多。

+0

「一次額外的縮進級別有什麼問題?」他說:這是關於清晰度。保持低縮水平通常是高質量代碼 – hek2mgl

+1

@ hek2mgl的特性:我發現'main()'函數的意圖要清楚得多。 –

+3

'main'函數(與所有其他函數一樣)應該很小。我沒有看到爲什麼某些行的縮進級別會破壞清晰度的原因。當然,如果你在'main()'中寫入數百行,它可能會有點難看,但這適用於每個函數 - 如前所述。 – tamasgal

3

可以做到這一點:

if __name__ != "__main__": 
    throw TypeError("Attempted to import command-line only script") 

# Your code here 

不過,我會建議對這種模式 - 大部分的時間應該很明顯,一個腳本是唯一的命令行。如果某人在腳本中定義了一些用例,那麼他們就不必爲了能夠導入一個函數而對其進行編輯。

+0

創意答案!但因爲它需要在導入時捕捉異常,所以確實可以簡化整體情況,並且確實是意想不到的。良好的代碼不應該讓人驚訝。 – mnagel

2

功能應該做一件事,這也適用於main。它應該做(一些)main的東西和其他一切應該在功能和類中完成。

是絕對沒有理由認爲這是一個「不必要的缺口」 ......

0

你不得不促使進口商自身行爲不同。雖然很困難,但肯定不可取,因爲你會引入一些非常意想不到的行爲。

如果你真的想避免額外的縮進,你可以,我想,實現一個'公共'和'私人'模塊,公共模塊根據if __name__ == '__main__'分支加載一個不同的私有模塊。但是,這似乎是很多箍環,以避免一些額外的縮進。無論如何,如果你的main()足夠長以致於縮進讓你煩惱,那麼你應該考慮首先將更多的功能分解到函數中。

相關問題