2017-05-01 10 views
0

私はPythonの新機能です。 私はargsを渡して%sを使用してdict args.Butのキーと値を出力する関数を実装しようとしていますが、これは%を使用するのが無効であることを示しています。それは私を本当に混乱させた。理由を教えてくれてありがとう。関数(Python 3.5)で%sまたは** argsを使用する方法

>>> def person(name, age, **args): 
print('name:', name, 'age:', age) 
for i in args.keys(): 
    print('%s:%s', % (i, args[i])) 

SyntaxError: invalid syntax 

次のコードは、%sの代わりにformatを使用して、argsのキーと値を表示しようとしています。 しかし、それはargsがNoneTypeであることを私に伝え続けます。それから、私は通常の方法でargsを表示します( "args:"、args)、それはうまくいきます。なぜそれが言っているのか知りたいです。ありがとうございます!

>>> def person(name, age, **args): 
print('name:', name, 'age:', age) 
for i in args.keys(): 
    print('{}:{}').format(i, args[i]) 

>>> person('Joey', 20, weight=60, length=172) 
name: Joey age: 20 
{}:{} 
Traceback (most recent call last): 
File "<pyshell#79>", line 1, in <module> 
    person('Joey', 20, weight=60, length=172) 
File "<pyshell#78>", line 4, in person 
    print('{}:{}').format(i, args[i]) 
AttributeError: 'NoneType' object has no attribute 'format' 
+1

2番目のケースでは、フォーマットは 'print'の呼び出しの内側にある必要があります。 'print( '{}:{}'。書式(i、args [i]))' – asongtoruin

答えて

1

あなたはcomma追加を持って、ここに行く:

def person(name, age, **args): 
    print('name:', name, 'age:', age) 

    for i in args.keys(): 
     print('%s:%s' % (i, args[i])) 

person('Joey', 20, weight=60, length=172) 
1

あなたの構文が間違っている、あなたは印刷の内側に文字列をフォーマットする必要があります。

print('{}:{}'.format(i, args[i])) 
1

あなたが追加をしていますあなたの文字列の後にカンマ,これを削除すれば、コードは正常に動作します。また、dict.keys(..)の代わりにdict.item(...)を使用することをお勧めします。以下のサンプルコードです:また

>>> kwargs = {'name': 'My name', 'age': 'My Age', 'Address': 'My Address'} 

#     v `dict.items()` to get tuple of 
#     v (`key`, `value`) pair 
>>> for i in kwargs.items(): 
...  print('%s:%s' % (i)) 
...  #   ^No comma   
Address:My Address 
name:My name 
age:My Age 

、一般的な慣例に従って、あなたの変数名がkwargsの代わりargsでなければなりません。お読みください:*args and **kwargs?

0

の方法は、あなたがあなたの関数を定義します。

def person(name, age, **args):

は、あなたが2つの必須の引数+キーワード引数を望んでいることを意味します。

だから、あなたのような何かをする必要があります: '名::'、名前、 '年齢:'、年齢、あなたが4つの引数で print('name:', name, 'age:', age)

をやっているのに対し、

person(argument_one, argument_two, keyword_argument_one=keyword_argument_one_value, keyword_argument_two=keyword_argument_two_value)

実際には%または.format機能には接続されていません。これはPythonの基本構文です。

はその後、あなたは別の問題があります。

print('{}:{}').format(i, args[i])

あなたがNoneプリント(...)出力、上.formatメソッドを呼び出しています。したがって、 "NoneTypeには.formatメソッドがありません"というエラーが表示されます。

ので、単純に実行します。

print('{}:{}'.format(i, args[i]))

をそれを修正します。

関連する問題