标签: repr

__str__和__repr__之间的区别?

之间有什么区别__str____repr____str__

python repr magic-methods

2545
推荐指数
21
解决办法
61万
查看次数

访问对象内存地址

当您object.__repr__()在Python中调用该方法时,您会得到类似这样的内容:

<__main__.Test object at 0x2aba1c0cf890> 
Run Code Online (Sandbox Code Playgroud)

如果你超载__repr__(),有没有办法得到一个内存地址,除了调用super(Class, obj).__repr__()和重新出现之外?

python object repr memory-address

154
推荐指数
6
解决办法
17万
查看次数

理解Python中的repr()函数

repr():对象的可评估字符串表示形式(可以"eval()"它,这意味着它是一个求值为Python对象的字符串表示形式)

换一种说法:

>>> x = 'foo'
>>> repr(x)
"'foo'"
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 为什么我这样做时会得到双引号repr(x)?(当我这样做时,我不会得到它们str(x))
  2. 为什么我'foo'在做的时候会得到eval("'foo'")而不是x那个对象?

python repr

137
推荐指数
3
解决办法
18万
查看次数

__repr __()函数的最佳输出类型和编码实践?

最近,我有很多的麻烦__repr__(),format()和编码. 输出__repr__()应该编码还是unicode字符串?__repr__()Python中 的结果是否有最佳编码?我想输出的内容确实有非ASCII字符.

我使用Python 2.x,并希望编写可以轻松适应Python 3的代码.程序因此使用

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function  # The 'Hello' literal represents a Unicode object
Run Code Online (Sandbox Code Playgroud)

以下是一些困扰我的其他问题,我正在寻找解决它们的解决方案:

  1. 打印到UTF-8终端应该可以工作(我已经sys.stdout.encoding设置了UTF-8,但最好是其他情况也能正常工作).
  2. 将输出管道输出到文件(以UTF-8编码)应该可以工作(在这种情况下,sys.stdout.encodingNone).
  3. 我的许多__repr__()功能的代码目前有很多return ….encode('utf-8'),而且很重要.有什么强劲和轻松的吗?
  4. 在某些情况下,我甚至有丑陋的野兽return ('<{}>'.format(repr(x).decode('utf-8'))).encode('utf-8'),即对象的表示被解码,放入格式化字符串,然后重新编码.我想避免这种错综复杂的转变.

为了编写__repr__()与这些编码问题相关的简单函数,您建议做什么?

python encoding ascii repr

66
推荐指数
2
解决办法
9538
查看次数

为什么反斜杠会出现两次?

当我创建一个包含反斜杠的字符串时,它们会重复:

>>> my_string = "why\does\it\happen?"
>>> my_string
'why\\does\\it\\happen?'
Run Code Online (Sandbox Code Playgroud)

为什么?

python string escaping repr backslash

46
推荐指数
2
解决办法
1万
查看次数

python 2.7.5中的str()vs repr()函数

python 2.7.5 str()repr()函数有什么区别?

python.org上的说明:

str()函数用于返回值相当于人类可读的值的表示,同时repr()用于生成可由解释器读取的表示(或者SyntaxError如果没有等效语法则强制执行)

但这对我来说并不清楚.

一些例子:

>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"      # repr is giving an extra double quotes
>>> str(1.0/7.0)
'0.142857142857'
>>> repr(1.0/7.0)
'0.14285714285714285'  # repr is giving value with more precision
Run Code Online (Sandbox Code Playgroud)

所以我想知道以下内容

  1. str()应该何时使用,何时使用repr()
  2. 在哪些情况下我可以使用它们中的任何一个?
  3. 什么可以str()做哪些repr()不可以?
  4. 什么可以repr()做哪些str()不可以?

python string repr python-2.7

28
推荐指数
1
解决办法
5万
查看次数

Java相当于Python repr()?

有没有像Python的repr一样工作的Java方法?例如,假设该函数名为repr,

"foo\n\tbar".repr()
Run Code Online (Sandbox Code Playgroud)

会回来的

"foo\n\tbar"

foo
        bar

至于toString.

python java repr

23
推荐指数
4
解决办法
5433
查看次数

python显示\ n而不是换行

我编写了一个函数来创建VALUESSQL查询的一部分:

def query_values(data_iterator):
    return ',\n'.join('\n({})\n'.format(',\n'.join('"{}"'.format(value) for value in data_row)
                                     ) for data_row in data_iterator
                      ),
Run Code Online (Sandbox Code Playgroud)

当我调用此函数和print结果时,得到的是:

query_values:
('\n("801",\n"printer",\n"barcode printer")\n,\n\n("844",\n"laptop",\n"windows")\n,\n\n("997",\n"printer",\n"barcode printer")\n',)
Run Code Online (Sandbox Code Playgroud)

合而为一。而不是换行,\n而是显示。

本来我有一个\n,但是后来我插入了多个,只是看它们是否会显示出来。

第二个问题是整个内容中都有括号,这是我不想要的。

我对这两个问题感到困惑,我想出了第二个问题的解决方案:

函数结尾处有一个逗号。逗号导致函数返回一个元组,而不是单个字符串。

我删除了逗号:

def query_values(data_iterator):
    return ',\n'.join('\n({})\n'.format(',\n'.join('"{}"'.format(value) for value in data_row)
                                     ) for data_row in data_iterator
                      )
Run Code Online (Sandbox Code Playgroud)

并且解决了两个问题。现在的输出是:

query_values:

("801",
"printer",
"barcode printer")
,

("844",
"laptop",
"windows")
,

("997",
"printer",
"barcode printer")
Run Code Online (Sandbox Code Playgroud)

我把逗号放回去,并且\n显示了。我删除了逗号,并且再次有多行。

我删除了无关的东西\n,所以现在我得到了想要的:

query_values:

("801","printer","barcode printer"),
("844","laptop","windows"),
("997","printer","barcode printer")
Run Code Online (Sandbox Code Playgroud)

因此,我的代码可以正常工作,但是我\n对旧版本代码中显示的字符完全感到困惑。为什么会这样呢? …

python string tuples newline repr

18
推荐指数
2
解决办法
1974
查看次数

什么做!在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
查看次数

我们如何获得__repr __()的默认行为?

如果有人在python中编写一个类,并且未能指定自己的__repr__()方法,则为它们提供默认方法.但是,假设我们要编写一个与默认行为具有相同或相似行为的函数__repr__().但是,我们希望此函数具有默认__repr__()方法的行为,即使__repr__()该类的实际重载也是如此.也就是说,假设我们想要编写一个与默认行为具有相同行为的函数,__repr__()而不管是否有人重载了该__repr__()方法.我们怎么做?

class DemoClass:
    def __init__(self):
        self.var = 4
    def __repr__(self):
        return str(self.var)

def true_repr(x):
    # [magic happens here]
    s = "I'm not implemented yet"
    return s

obj = DemoClass()

print(obj.__repr__())

print(true_repr(obj))
Run Code Online (Sandbox Code Playgroud)

期望的输出:

print(obj.__repr__())打印4,但print(true_repr(obj))打印如下:
<__main__.DemoClass object at 0x0000000009F26588>

python repr representation python-3.x

15
推荐指数
3
解决办法
1866
查看次数