2017-11-27 5 views
1

この変数がプロパティファイルに存在する場合、メソッドに変数を渡すコードがあります。既存のパラメータのみをメソッドに渡す

if all(hasattr(globals().get('properties'), var) for var in ['NAME','VALUE']): 
    return reader.get_smth(name=properties.NAME, value=properties.VALUE) 
else: 
    return reader.get_smth() 

get_smth()には、渡されたパラメータごとにデフォルト値があることは明らかです。

それでは、どのように私はelif

P.S.の多数を避ける唯一の既存のパラメータ(reader.get_smth(name=properties.NAME)またはreader.get_smth(value=properties.VALUE))を渡すことができます渡されなければならないパラメータ以上2

+0

多分あなたがしたいことを少し明確にする必要があります。 –

答えて

2

ここでは、名前付きキーワード**kwargsを使用できます。

prop_dict = {'name': 'NAME', 'value': 'VALUE'} 

次の私たちは、次のアプローチを使用することができます:

reader.get_smth(**{k: getattr(properties, v) 
        for k,v in prop_dict.items() 
        if hasattr(properties, v)}) 
まず、 properties(例えば NAME)の名​​前に get_smth機能(例えば name)のパラメータの名前をマップする辞書を構築します
2

star expressionsを参照してください。

は、以下のことを試してみてください。

reader.get_smth(**properties) 

これは、関数の引数に辞書からキーと値のペアを解凍します。

プロパティ名は引数名と同じにする必要があります(プロパティの大文字と小文字はプログラム内にあるようです)。

+0

*すべてのプロパティを渡すことはあまりありません。また、プロパティの名前は関数のパラメータ( 'NAME'と' name')と同じであることに注意してください。 +1はアイデアが正しいので、+1です:) –

+0

@WillemVanOnsemああ、はい。いいキャッチ! –

関連する問題