2011-12-12 12 views
2

デフォルトの入力値を入力値の1つに依存させる可能性はありますか?私はこれを試しました:Python辞書の値を辞書の他の値に隣接して変更する

しかし、pricesataはまだ定義されていないので動作しません。一般的なケースでは

def getHigh(pricedata, start=None, end=None): 
    if start is None: 
     start = min(pricedata) 
    if end is None: 
     end = max(pricedata) 

と...

def getHigh(pricedata, **kwargs): 
    start = kwargs.get("start", min(pricedata)) 
    end = kwargs.get("end",max(pricedata)) 
+3

私はいずれかを行う決してお勧めしますそのようなスーパーアドバンスのものは、関数の引数の中ではなく、関数の本体で、それを適切に定義することができます。 –

+1

答えをありがとう。彼らは本当に大きな助けとなりました。おそらく私は平凡な&簡単な答えに固執するのに最適です。 – Randomtheories

答えて

6

は、あなたが求めて何をすべきかの単純な:)

def getHigh(pricedata, start=None, end=None): 
    start = min(pricedata) if start is None else start 
    end = max(pricedata) if end is None else end 
2

2つの方法があるキープNoneを使用してこれを行い、テストしてください。

あなたが範囲を設定しているし、その範囲内のアイテムのみを処理する場所、あなたはすべての可能な値を含むデフォルトを使用することができます特定のケースで
def getHigh(pricedata, start=None, end=None): 
    start = min(pricedata) if start is None else start 
    end = max(pricedata) if end is None else end 

def getHigh(pricedata, start=float("-inf"), end=float("+inf")): 
    # consider only items between start and end, inclusive 
    pricedata = [datum for datum in pricedata if start <= datum <= end] 
+0

2番目の解決策の問題は、関数が名前付き引数を受け入れ、使用されていない場合は不平を言わないことです。 .get()の代わりに.pop()を使用して、dictが空になるかどうかを調べることができます。 – yak

+0

それは名前付き引数を受け入れることは事実ですが、なぜそれが問題を引き起こすのかはわかりません(一般的には、 '** kwargs'を渡すと思います)。あなたはその呼び出しを保護しようとしていました)。あなたの名前空間を汚染することはなく、無視することは安全です。私は、あなたがこれが引き起こす具体的な問題が何であるか知りたいと思っています。 – Nate

+0

キーワード引数を使用する際の1つの問題は、 'help()'や他の自動化されたドキュメントツールが関数が受け付ける引数を教えてくれないことです。これは大したことではないかもしれません。また、おそらく必要がない場合は、オプション引数をキーワード引数として渡す必要があります。 – kindall

3

、次のことができます。