2017-01-31 59 views
1

我在這裏找到了資源,但它們與本地嵌入函數有關。我有一個名爲「test」的文件,另一個文件名爲「main」。我希望測試能夠包含我所有的邏輯,而main將包含與健康保險政策相關的完整功能列表。有數以百計的政策,因此每次在「測試」中寫入if語句會變得非常繁瑣。我想寫儘可能少的行來根據值的狀態調用函數。例如:從if-Python 3.x中的另一個文件調用一個函數

insurance = input() 

最終結果不是輸入,而是出於測試/學習的目的。如果投入存在,投入將始終與保險相關。所以,在「測試」我目前有:

from inspolicy.main import bcbs, uhc, medicare 

print('What is the insurance?(bcbs, uhc, medicare)') 
insurance = input() 

if insurance.lower() == 'bcbs': 
    bcbs() 
elif insurance.lower() == 'uhc': 
    uhc() 
elif insurance.lower() == 'medicare': 
    medicare() 
else: 
    print('This policy can not be found in the database. Please set aside.') 

有了「主」,包括:

def bcbs(): 
    print('This is BCBS') 

def uhc(): 
    print('This is UHC') 

def medicare(): 
    print('This is Medicare') 

那麼,有沒有辦法有輸入(即保險)什麼是對調用引用功能從「主」?

預先感謝您的時間!

回答

1

最好的方法是使用字典來映射保險單名稱和處理它們的函數。這可能是在你的模塊中一個手工打造的字典,或者你可以簡單地使用main模塊的命名空間(這是使用字典實現):

# in test 
import types 
import inspolicy.main # import the module itself, rather than just the functions 

insurance = input('What is the insurance?(bcbs, uhc, medicare)') 

func = getattr(inspolicy.main, insurance, None) 
if isinstance(func, types.FunctionType): 
    func() 
else: 
    print('This policy can not be found in the database. Please set aside.') 
+0

你是真正的MVP!非常感謝你的幫助。無可否認,我是初學者,但我總是喜歡學習更復雜的東西,因爲從長遠來看,這有助於我更好地理解其他部分。非常感謝! – ResidentBA

0

讓我們考慮這是你main.py

def uhc(): 
    print("This is UHC") 

這是可以做到這樣的事情在test.py

import main 

def unknown_function(): 
    print('This policy can not be found in the database. Please set aside.') 

insurance = input() 

try: 
    insurance_function = getattr(main, insurance.lower()) 
except AttributeError: 
    insurance_function = unknown_function 

insurance_function() 

然後,如果你輸入「UHC」作爲輸入,你會得到來自main.py的uhc函數並調用它。

+0

謝謝你這麼多,又回到了我這麼快! – ResidentBA

相關問題