2017-01-31 15 views
1

ここにはリソースがありますが、ローカルに組み込まれている関数に関連しています。私は "test"と呼ばれるファイルと "main"というファイルを持っています。テストにはすべての論理が含まれ、メインにはそれぞれが健康保険と相関する機能の完全なリストが含まれています。何百ものポリシーがあるので、if文を毎回 "test"に書くのは非常に面倒です。私は、値が何を意味するかに基づいて関数を呼び出すために、できるだけ少ない行で記述したいと思います。次のようなものがあります。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') 

ので、入力(すなわち保険)を呼び出すことに対して参照されているものも持ってする方法がありますmainからの関数?

ありがとうございました!

答えて

1

これに最も効果的なアプローチは、保険契約の名前とそれを扱う機能を辞書で結び付けることです。これはあなたのモジュールの1つに手作りのdictの可能性があり、または単に(辞書を使用して実装されている)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

のは、これはtest.pyにそのような何かを行うことが可能ですあなたのmain.py

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

で考えてみましょう:

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」を入力すると、あなたが得ますuhc関数をmain.pyから呼び出して呼び出します。

+0

はとても私に戻って取得するためにどうもありがとうございます速い! – ResidentBA

関連する問題