关于python:有人可以解释如何使用repr函数格式化输出吗?

Can someone explain how to use the repr function to format the output?

本问题已经有最佳答案,请猛点这里访问。

我想要以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Tier0 = ['Tier', 'Weights', 'Price', 'Number of Businesses', 'Revenue']
Tier1 = ['Tier 1', 180,]
Tier2 = ['Tier 2', 300,]
Tier3 = ['Tier 3', 450,]
Tier4 = ['Tier 4', 600,]
Tier5 = ['Tier 5', 750,]

data = []
data.append(Tier0)
data.append(Tier1)
data.append(Tier2)
data.append(Tier3)
data.append(Tier4)
data.append(Tier5)    
data

for Tier1 in data[1:]:
    Tier1.insert(1, float(input('Enter the weighted value of Tiers 1-5 as a decimal: ')))
    Tier1.insert(3, Tier1[1] * MissouriBusiness)#calculates the number of businesses
    Tier1.insert(4, Tier1[2] * Tier1[1] * MissouriBusiness)#calculates the revenue

要更改的输出:

1
[['Tier', 'Weights', 'Price', 'Number of Businesses', 'Revenue'], ['Tier 1', 0.2, 180, 40000.0, 7200000.0], ['Tier 2', 0.1, 300, 20000.0, 6000000.0], ['Tier 3', 0.3, 450, 60000.0, 27000000.0], ['Tier 4', 0.15, 600, 30000.0, 18000000.0], ['Tier 5', 0.2, 750, 40000.0, 30000000.0]]

更美好的事物,比如:

1
2
3
4
5
6
[['Tier', 'Weights', 'Price', 'Number of Businesses', 'Revenue'],
['Tier 1', 0.2, 180, 14000.0, 2520000.0],
['Tier2', 0.2, 300, 14000.0, 4200000.0],
['Tier3', 0.2, 450, 14000.0, 6300000.0],
['Tier4', 0.3, 600, 21000.0, 12600000.0],
['Tier5', 0.1, 750, 7000.0, 5250000.0]]

Python文档有一个很好的例子,我似乎无法理解它是如何工作的。

1
2
3
4
5
6
7
8
9
10
>>> for x in range(1, 11):
...     print repr(x).rjust(2), repr(x*x).rjust(3),
...     # Note trailing comma on previous line
...     print repr(x*x*x).rjust(4)
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125

这段代码来自于python的文档:https://docs.python.org/2/tutorial/inputout.html

对于这个repr函数是如何工作的,以及如何合并它的一个简化的解释将非常感谢,因为每当查看文档或其他类似的问题时,我都会看到乱七八糟的内容。

蒂亚


repr函数被集成为返回"可打印的对象表示",可能与eval函数一起使用,从其字符串表示构造对象。但是repr本身不做任何格式化,它只是在对象上调用__repr__方法,这可能是一些默认的python实现或您在对象上的实现。

在您的例子中,当您在一个列表中调用repr时,它只返回带引号的列表输出,这就是为列表对象实现repr的方式:

1
2
3
>>> data = [['Tier', 'Weights', 'Price', 'Number of Businesses', 'Revenue'], ['Tier 1', 0.2, 180, 40000.0, 7200000.0], ['Tier 2', 0.1, 300, 20000.0, 6000000.0], ['Tier 3', 0.3, 450, 60000.0, 27000000.0], ['Tier 4', 0.15, 600, 30000.0, 18000000.0], ['Tier 5', 0.2, 750, 40000.0, 30000000.0]]
>>> repr(data)
"[['Tier', 'Weights', 'Price', 'Number of Businesses', 'Revenue'], ['Tier 1', 0.2, 180, 40000.0, 7200000.0], ['Tier 2', 0.1, 300, 20000.0, 6000000.0], ['Tier 3', 0.3, 450, 60000.0, 27000000.0], ['Tier 4', 0.15, 600, 30000.0, 18000000.0], ['Tier 5', 0.2, 750, 40000.0, 30000000.0]]"

您提供的repr示例实际上只不过是手动格式化。在这种情况下,repr只用于获取整数x的字符串表示,以便能够调用string.rjust格式化函数:

1
2
3
4
>>> repr(1)
'1'
>>> repr(1).rjust(3)
'  1'

至于您的情况,您可以使用用于Python数据结构漂亮打印的pprint模块。pprint.pprint函数实际上的行为与您想要的几乎完全相同:

1
2
3
4
5
6
7
8
9
>>> data = [['Tier', 'Weights', 'Price', 'Number of Businesses', 'Revenue'], ['Tier 1', 0.2, 180, 40000.0, 7200000.0], ['Tier 2', 0.1, 300, 20000.0, 6000000.0], ['Tier 3', 0.3, 450, 60000.0, 27000000.0], ['Tier 4', 0.15, 600, 30000.0, 18000000.0], ['Tier 5', 0.2, 750, 40000.0, 30000000.0]]
>>> import pprint
>>> pprint.pprint(data)
[['Tier', 'Weights', 'Price', 'Number of Businesses', 'Revenue'],
 ['Tier 1', 0.2, 180, 40000.0, 7200000.0],
 ['Tier 2', 0.1, 300, 20000.0, 6000000.0],
 ['Tier 3', 0.3, 450, 60000.0, 27000000.0],
 ['Tier 4', 0.15, 600, 30000.0, 18000000.0],
 ['Tier 5', 0.2, 750, 40000.0, 30000000.0]]

但如果你需要一些非常具体的东西,你可能需要自己滚印。