2016-11-04 19 views
0
def add(): 
    import add_coffee_record 
    import imp 
    imp.reload(add_coffee_record) 

def show(): 
    import show_coffee_records 
    import imp 
    imp.reload(show_coffee_records) 

def search(): 
    import search_coffee_records 
    import imp 
    imp.reload(search_coffee_records) 

def modify(): 
    import modify_coffee_records 
    import imp 
    imp.reload(modify_coffee_records) 

def delete(): 
    import delete_coffee_record 
    import imp 
    imp.reload(delete_coffee_record) 

def main(): 
    num=input('\nEnter the number on the menu: ') 
    while num != '6': 
     if num == '1': 
      print() 
      add() 
     if num == '2': 
      print() 
      show() 
     if num == '3': 
      print() 
      search() 
     if num == '4': 
      print() 
      modify() 
     if num == '5': 
      print() 
      delete() 
     num=input('\nEnter the number on the menu: ') 

main() 

我的輸出看起來像這樣:如何導入,然後重裝沒有初始重複

Enter the number on the menu: 2 

Description: Thanksgiving Blend 
Quantity: 300.0 
Description: Christmas Blend 
Quantity: 100.0 
Description: Thanksgiving Blend 
Quantity: 300.0 
Description: Christmas Blend 
Quantity: 100.0 

Enter the number on the menu: 2 

Description: Thanksgiving Blend 
Quantity: 300.0 
Description: Christmas Blend 
Quantity: 100.0 

Enter the number on the menu: 2 

Description: Thanksgiving Blend 
Quantity: 300.0 
Description: Christmas Blend 
Quantity: 100.0 

我想,如果第一輸出不會重複自身。有沒有一種方法來構建程序,在第一個實例上只使用「導入」,而在後續實例中使用「重新加載」?注意:我無法複製粘貼程序文件而不是導入。我需要使用導入。謝謝。

+0

也許'嘗試:imp.reload(模塊);除了ImportError:import module'? – Evert

+1

我覺得你對使用'import'感到困惑。它的目的不是運行一些代碼,而是在當前的上下文中提供一個模塊。雖然它第一次運行模塊,但不應該將其用於初始設置以外的任何操作。 - 在這裏,您應該先完成所有導入,然後讓它們定義您在調用之後調用的函數。 – spectras

+0

注意:'imp'在Python 3中已被'importlib'取代,而'imp'實質上已被棄用。 – Evert

回答

0

你可以從sys.modules導入之前刪除模塊:

def add(): 
    sys.modules.pop("add_coffee_record") 
    import add_coffee_record 

另一種選擇是直接調用imp.load_module

def add(): 
    imp.load_module("add_coffee_record", *imp.find_module("add_coffee_record")) 
+0

賓果舊金山。謝謝。 – ChanMan

+0

@ChanMan>你仍然不應該這樣做。這些是內部細節,它通過不贊成的API使用它們。學會正確使用導入。 – spectras