2016-10-16 11 views
0

**kwargsで関数を作成する必要があります。これは辞書の数値を2倍にする必要があります。数値のみ!** kwargsを使ってPythonで動かない

私のコードは次のようになります。これを行うに

fmm= {'zbk': 30, 
     'moartea': 78, 
     'Cox': 'sweet', 
     'fanina': 'Alex', 
     'rex': 24 
     } 

def my_func(**kwargs): 
    for k,v in fmm.items(): 
    print(v*2) 
my_func() 
+0

なぜ** kwargsを使用する必要がありますか? –

+0

これらの値は辞書内で2倍にする必要がありますか?また、try ...内でtype()またはint()を使用してint型のデータ型をテストします。... except – rocksteady

+0

これを解決する方法はありますか? – javralea

答えて

3

一つの方法:私は直接の引数を変更することができませんでした

fmm= {'zbk': 30, 
     'moartea': 78, 
     'Cox': 'sweet', 
     'fanina': 'Alex', 
     'rex': 24 
     } 

def my_func(**kwargs): 

    for k,v in kwargs.items(): 
     if isinstance(v,int) or isinstance(v,float): 
      kwargs[k] *= 2 
    return kwargs 

fmm = my_func(**fmm) 
print(fmm) 

注意を。 Pythonは渡されたdictのコピーを作成します。

+0

ありがとうございました。 – javralea

+0

なぜ 'int'をチェックするのですか?浮動小数点は '* 2'をサポートしており、文字列(と他のオブジェクトも)に対して完全に有効です。オブジェクトが '__mul__'をサポートしているかどうかチェックする価値があります。 – cdarke

+0

OPは「倍数値」を求めた。フロートもチェックしなければなりません。しかし、文字列は範囲外です。 –

1

なぜダブルポインタですか?あなたはそれもなくても完全にすることができます。

fmm= {'zbk': 30, 
     'moartea': 78, 
     'Cox': 'sweet', 
     'fanina': 'Alex', 
     'rex': 24 
     } 

def my_func(): 
    for k,v in fmm.items(): 
    print(v*2) 
my_func() 
+0

これはダブルポインタではありません。 Python!= C –

+1

これはおそらく、キーワード引数のアンパックに関するチュートリアルの演習です。 – cdarke

関連する問題