каково значение %r в Python

Я придумал это, чтобы преодолеть недостаток .NET , который должен вручную выполнить глубокое копирование List & lt; T>.

Я использую это:

static public IEnumerable CloneList(List spotPlacements)
{
    foreach (SpotPlacement sp in spotPlacements)
    {
        yield return (SpotPlacement)sp.Clone();
    }
}

И в другом месте:

public object Clone()
{
    OrderItem newOrderItem = new OrderItem();
    ...
    newOrderItem._exactPlacements.AddRange(SpotPlacement.CloneList(_exactPlacements));
    ...
    return newOrderItem;
}

Я попытался придумать oneliner, который делает это, но это невозможно, из-за того, что выход не работает внутри блоков анонимного метода.

Еще лучше использовать универсальный список & lt; T> cloner:

class Utility where T : ICloneable
{
    static public IEnumerable CloneList(List tl)
    {
        foreach (T t in tl)
        {
            yield return (T)t.Clone();
        }
    }
}

62
задан TM. 1 March 2010 в 07:17
поделиться

6 ответов

Справочная информация:

В Python есть две встроенные функции для преобразования объекта в строку: str vs. репр . str должна быть дружественной, удобочитаемой строкой. repr должен включать подробную информацию о содержимом объекта (иногда они возвращают то же самое, например, для целых чисел). По соглашению, если есть выражение Python, которое вычисляет другой объект ==, repr вернет такое выражение, например.

>>> print repr('hi')
'hi'  # notice the quotes here as opposed to...
>>> print str('hi')
hi

Если возвращаемое выражение не имеет смысла для объекта, repr должен возвращать строку, окруженную символами <и>, например. .

Чтобы ответить на ваш исходный вопрос:

% s <-> str
% r <-> repr

Дополнительно:

Вы можете контролировать способ преобразования экземпляра ваших собственных классов в строки, реализуя методы __ str __ и __ repr __ .

class Foo:

  def __init__(self, foo):
    self.foo = foo

  def __eq__(self, other):
    """Implements ==."""
    return self.foo == other.foo

  def __repr__(self):
    # if you eval the return value of this function,
    # you'll get another Foo instance that's == to self
    return "Foo(%r)" % self.foo
78
ответ дан 24 November 2019 в 16:47
поделиться

%s вызовы __str()__ метод выбранного объекта и заменяет себя возвращаемым значением,

%r вызовы __repr()__ метод выбранного объекта и заменяет себя возвращаемым значением.

1
ответ дан 24 November 2019 в 16:47
поделиться

Я читал в "Учении на горьком опыте Python", сказал автор, что

%r является лучшим для отладки, другие форматы для отображения переменных пользователям

0
ответ дан 24 November 2019 в 16:47
поделиться

Он вызывает repr () для объекта и вставляет полученную строку.

20
ответ дан 24 November 2019 в 16:47
поделиться

Он выводит замену в виде строки с помощью repr () .

4
ответ дан 24 November 2019 в 16:47
поделиться

Смотрите Операции форматирования строк в документации. Обратите внимание, что %s, %d и т.д. могут работать не так, как вы ожидаете, если вы привыкли к тому, как они работают в другом языке, например, в C.

В частности, %s также хорошо работает для интов и плавающих чисел, если у вас нет особых требований к форматированию, где %d или %f дадут вам больше контроля.

0
ответ дан 24 November 2019 в 16:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: