我是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'
答案 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]))
修复它。