相关疑难解决方法(0)

什么做!在str()和repr()中做什么?

根据Python 2.7.12文档:

!s(apply str())和!r(apply repr())可用于在格式化之前转换值.

>>> import math
>>> print 'The value of PI is approximately {}.'.format(math.pi)
The value of PI is approximately 3.14159265359.
>>> print 'The value of PI is approximately {!r}.'.format(math.pi)
The value of PI is approximately 3.141592653589793.
Run Code Online (Sandbox Code Playgroud)

有趣的是,转换后的值是输出repr(),而不是str().

>>> str(math.pi)
'3.14159265359'
>>> repr(math.pi)
'3.141592653589793'
Run Code Online (Sandbox Code Playgroud)

那么"转换价值"在这里意味着什么呢?使它不那么人性化?

python string formatting repr python-2.7

15
推荐指数
1
解决办法
8867
查看次数

所有成员变量的Python __repr__

实现__repr__了一类Foo有成员变量xy,是有办法来自动填充字符串?不起作用的示例:

class Foo(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __repr__(self):
        return "Foo({})".format(**self.__dict__)

>>> foo = Foo(42, 66)
>>> print(foo)
IndexError: tuple index out of range
Run Code Online (Sandbox Code Playgroud)

而另一个:

from pprint import pprint
class Foo(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __repr__(self):
        return "Foo({})".format(pprint(self.__dict__))

>>> foo = Foo(42, 66)
>>> print(foo)
{'x': 42, 'y': 66}
Foo(None)
Run Code Online (Sandbox Code Playgroud)

是的我可以将方法定义为

    def __repr__(self):
        return "Foo({x={}, y={}})".format(self.x, self.x)
Run Code Online (Sandbox Code Playgroud)

但是当有许多成员变量时,这会变得乏味.

python repr string-formatting

4
推荐指数
2
解决办法
2051
查看次数