2016-10-10 82 views
0

我正在研究leetcode,但實際上從未在本地寫過一個文件。基本的python用法,調用函數

class Solution(object): 
    def singleNumber(self, nums): 

     for i in range(0,len(nums),2): 
      if (i != len(nums) - 1) and (nums[i] != nums[i+1]): 
       print (nums[i]) 
      elif i == len(nums) - 1: 
       print (nums[i]) 

    def main(): 
     nums=[1,1,2,2,3] 
     s=Solution() 
     s.singleNumber(nums) 
     print('done') 

我正在運行此腳本,但沒有看到任何輸出,也不明白我在做什麼錯。

+0

使用本地python程序,主代碼總是在類的外部*執行。因此,您需要將所有函數和類之外的代碼移動到「def main()」之外,而不需要縮進。然後刪除「def main()」,因爲它不是你認爲它的主要方法。 –

+0

你爲什麼要把'main'作爲'Solution'的一個方法? –

回答

2

移動你的主要功能類外,再具體執行:

class Solution(object): 
    def singleNumber(self, nums): 

     for i in range(0,len(nums),2): 
      if (i != len(nums) - 1) and (nums[i] != nums[i+1]): 
       print (nums[i]) 
      elif i == len(nums) - 1: 
       print (nums[i]) 

def main(): 
    nums=[1,1,2,2,3] 
    s=Solution() 
    s.singleNumber(nums) 
    print('done') 

main() 

輸出:

3 
done 

另一種可能性是使它成爲一個獨立的功能都:降def main line,取消縮進該代碼的四行,並從頂層運行它。

+0

我不確定刪除'def main'客觀上更好。 –

+0

你是對的;這是有爭議的。措辭改變了。 – Prune

2

與許多其他編程語言(如Java)不同,Python不需要main方法在類中。更重要的是,Python 不需要定義main方法:它將整個文件作爲應用程序運行。在您的原始文章中,Python執行以下操作:

  • 將方法singleNumber定義爲其擁有的代碼。
  • 將方法main定義爲其保存的代碼。
  • 在類Solution中保存這兩種方法。
  • 沒有更多的線路運行,因此結束應用程序。

爲了使應用程序正確,則必須按如下寫:

class Solution(object): 
    def singleNumber(self, nums): 
     for i in range(0,len(nums),2): 
      if (i != len(nums) - 1) and (nums[i] != nums[i+1]): 
       print (nums[i]) 
      elif i == len(nums) - 1: 
       print (nums[i]) 

if __name__=='__main__': 
    nums=[1,1,2,2,3] 
    s=Solution() 
    s.singleNumber(nums) 
    print('done') 

你也許會奇怪,爲什麼線if __name__=='__main__':;每個文件都包含隱含定義的變量__name__,其值取決於您是直接運行文件還是導入文件。在第一種情況下,分配__name__='__main__'完成,在第二種情況下__name__變量被分配了文件本身的名稱;這給你一個想法,這個文件是否是主要的。

您也可以丟棄Solution類並將singleNumber方法提升爲模塊方法。