2016-09-21 7 views
5

私はちょうど約**kwargsについて興味があります。だから私の数字は、なぜ逆と印刷をしない{'y': 2, 'x': 1, 'z': 3} :私はまだ始まったばかりのstackoverflowとビデオチュートリアルのすべての質問を通過しながら、だから私たちは通りの出力が得られます。この** kwargsをPythonで印刷する方法はありますか

def print_dict(**kwargs): 
    print(kwargs) 
print_dict(x=1,y=2,z=3) 

のように行うことができます注意してください、それを学んでいます以下のようなx=1,y=2,z=3

だから私はこの試みた:

mydict = {'x':1,'y':2,'z':3} 
print(**mydict) 

をしかし、私はのようなエラーが発生しました:TypeError: 'z' is an invalid keyword argument for this function(時にはそれは「Y」は無効なキーワードであることを示しています)。

私はまた、変数に代入し、それを印刷するように試みたが、再び、私はエラー(SyntaxError: invalid syntax)得た:

mydict = {'x':1,'y':2,'z':3} 
var = **mydict 
print(var) 

はこれが働いている参照してください:

def print_dict(**this): 
    print(this) 
mydict = {'x':1,'y':2,'z':3} 
print_dict(**mydict) 

しかし、その代わりのprint(this)をもし私がprint(**this)の場合は、エラーが発生します。

私はこのコードを試してみて、我々は*argを印刷することができたよう:それは完全に実行して出力を与える

def num(*tuple_num): 
    print(tuple_num) 
    print(*tuple_num) 
num(1,2,3,4) 

を:だから私は知りたい

(1, 2, 3, 4) 
1 2 3 4 

に任意の可能な解決策/方法があります印刷**kwargs

答えて

9

構文あなたが別のキーワード引数を使用しているかのようcallable(**dictionary)辞書を適用します。

だからあなたの例は:正確な順序は、現在のランダムなハッシュシードに依存

print(x=1, y=2, z=3) 

mydict = {'x':1,'y':2,'z':3} 
print(**mydict) 

は内部に変換されます。 print()はこれらのキーワード引数をサポートしていないので、呼び出しは失敗します。

あなたが別の位置引数として値で渡されるので、他のprint()呼び出しは、成功します。

tuple_num = (1, 2, 3, 4) 
print(*tuple_num) 

が効果的と同じです:

print(1, 2, 3, 4) 

print()機能は別々の引数をサポートしていますその間にsepの値を1つずつ書き出します(デフォルトではスペースです)。

**dictionaryは、通話外の有効な構文ではありません。 callable(**dictionary)は呼び出し構文の一部であり、オブジェクトではないので、は何も印刷されません。です。

ほとんどで、あなたは形式辞書には、呼び出しのように見えるようにすることができます答えを照らす

print(', '.join(['{}={!r}'.format(k, v) for k, v in mydict.items()])) 
+0

が、それはあります。 – Nevertheless

4

あなたは(他に何も**kwargsではない)の辞書のための独自のフォーマットを構築する必要があります。

print(','.join('{0}={1!r}'.format(k,v) for k,v in this.items())) 
関連する問題