如何在函数中使用%s或格式化** args(Python 3.5)

时间:2017-05-01 10:49:36

标签: python python-3.5

我是Python的新手。 我尝试实现一个可以传递args并使用%s来打印dict 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

以下代码是我尝试使用format而不是%s来打印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'

4 个答案:

答案 0 :(得分: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 :(得分:1)

你的语法错误,你需要格式化print中的字符串:

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

答案 2 :(得分:1)

您的字符串后面还有一个额外的逗号,。删除它,你的代码将正常工作。此外,最好在您的情况下使用dict.item(...)代替dict.keys(..)。以下是示例代码:

>>> 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?

答案 3 :(得分:0)

定义函数的方式:

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

表示您需要2个必需参数+关键字参数。

所以,你需要做类似的事情:

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

而你正在做 print('name:', name, 'age:', age)

这是4个参数:'name:',name,'age:',age。

它实际上并未连接到%.format功能。这是Python的基本语法。

然后,你有另一个问题:

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

您正在print(...)输出上调用.format方法,该方法为None。因此,您会看到错误“NoneType没有.format方法”。

所以,只需:

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

修复它。