打印命名元组

5
在Python 2.7.1中,我可以创建一个命名元组:
from collections import namedtuple
Test = namedtuple('Test', ['this', 'that'])

我可以填充它:
my_test = Test(this=1, that=2)

我可以像这样打印它:

print(my_test)

测试(这=1,那=2)

但为什么我不能像这样打印它?

print("my_test = %r" % my_test)

编辑:我应该知道要查看在Python中使用字符串格式打印元组

类型错误:在字符串格式转换期间并非所有参数都已转换


重复的问题:在Python中使用字符串格式打印元组。如果你意识到你的问题是一个重复的问题,请标记它为“不属于这里->完全重复”,而不仅仅是添加一个链接到问题。 - agf
5个回答

10

因为my_test是一个元组,它会为元组中的每个项目寻找%格式。为了解决这个问题,请将其包装在另一个仅包含my_test的元组中:

print("my_test = %r" % (my_test,))

别忘了逗号。


简直不敢相信我又被这个问题咬了一口...谢谢! - JS.

2
你可以这样做:
>>> print("my_test = %r" % str(my_test))
my_test = 'Test(this=1, that=2)'

2

它将其解包为2个参数。与以下内容进行比较:

print("dummy1 = %s, dummy2 = %s" % ("one","two"))

在您的情况下,尝试将其放在一个元组中。
print("my_test = %r" % (my_test,))

1
之前的答案都是正确的,但如果您不想打印名称,这里有一个选项。这是一行代码,只会漂亮地打印任意长度的命名元组的内容。给定分配给“named_tuple”的命名元组,以下代码将生成一个逗号分隔的键值对字符串:
', '.join(['{0}={1}'.format(k, getattr(named_tuple, k)) for k in named_tuple._fields])

0

如今在4.7.2. printf-style String Formatting中有所记录,%字符串格式化或插值运算符存在问题:

[printf-style字符串格式化操作]表现出各种怪异行为,导致许多常见错误(例如无法正确显示元组和字典)。使用更新的格式化字符串字面值或str.format()接口可以避免这些错误。

因此,例如,您现在可以执行以下操作:

from collections import namedtuple
Test = namedtuple('Test', ['this', 'that'])
my_test = Test(this=1, that=2)
print("my_test = {0!r}".format(my_test))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接