2017-02-27 24 views
1

我想在main中運行我的flatten(li)函數,但是當我運行該模塊時它沒有運行。但是當我在shell中輸入「flatten(li)」時它正在工作。有任何想法嗎?謝謝!python main()在shell中不執行

li = [0, 2, [[2, 3], 8, 100, None, [[None]]], -2] 

def flatten(li): 
    i = 0 
    while i < len(li): 
     "only execute if the element is a list" 
     while isinstance(li[i], list): 
      """taking the element at index i and sets it as the 
       i'th part of the list. so if l[i] contains a list 
       it is then unrolled or 'unlisted'""" 
      li[i:i + 1] = li[i] 
     i += 1 

    for element in li: 
     if not element and not isinstance(element, int): 
     li.remove(element) 

    return li 

def main(): 
    flatten(li) 

if __name__ == '__main__': 
    main() 
+1

你什麼也看不到,因爲你沒有打印酷 – Copperfield

回答

0

你不是做與輸出任何東西。我不知道你希望看到什麼,但這樣的事情是你想要什麼:

li = [0, 2, [[2, 3], 8, 100, None, [[None]]], -2] 


def flatten(li): 
    i = 0 
    while i < len(li): 
     while isinstance(li[i], list): 
      li[i:i + 1] = li[i] 
     i += 1 

    for element in li: 
     if not element and not isinstance(element, int): 
      li.remove(element) 

    return li 


def main(): 
    flat = flatten(li) 
    print(flat) 


if __name__ == '__main__': 
    main() 
+0

非常感謝!我怎麼不打印,如果我只是在殼上輸入flatten(li)?另外,我的文檔是否正確? –

+0

當你輸入'flatten(li)'時,你會調用'flatten'函數,它返回'li'。默認情況下,你的shell正在打印返回的值。當你調用'main'調用'flatten',它將'li'返回'main',但'main'函數對該對象沒有任何作用。 'main'然後返回'None'到shell。 – Batman

+0

非常有幫助! –

0

它的工作,當然 - 你只是不打印任何東西,所以你什麼都看不到。嘗試添加print電話:

if __name__ == '__main__': 
    main() 
    print(li) 
+0

感謝這麼多!我怎麼不打印,如果我只是在殼上輸入flatten(li)?另外,我的文檔是否正確? –

+0

如果你從python shell運行東西,它會自動打印出所謂的函數返回 - 爲了您的方便。 – avysk

+0

不,你記錄代碼的方式是不正確的。改爲使用評論(''這裏有一些評論')。您嘗試記錄文檔(docstrings)的方式僅用於函數,類和模塊。 – avysk