Как использовать функцию в форматировании строк в Python [duplicate]

Попробуйте этот справочный инструмент сообщения об ошибках PHP . Это очень хорошая визуальная ссылка и помогла мне понять механизм создания сложных ошибок.

15
задан Hassek 5 November 2013 в 21:05
поделиться

4 ответа

Python 3.6 добавляет литеральную строчную интерполяцию, которая написана префиксом f. См. PEP 0498 - Интерполяция литеральных строк .

Это позволяет писать

>>> x = 'hello'
>>> s = f'{x}'
>>> print(s)
hello

Следует отметить, что это не фактические строки, но представлять код, каждый раз оценивающий строку. В приведенном выше примере s будет иметь тип str со значением 'hello'. Вы не можете передать f -струю вокруг, так как она будет оценена до результата str перед использованием (в отличие от str.format, но, как и любой другой модификатор строкового литерала, такой как r'hello', b'hello' , '''hello'''). ( PEP 501 - Интерполяция строк общего назначения (в настоящее время отложена) предлагает строковый литерал, который будет оценивать объект, который может принимать подстановки позже.)

10
ответ дан leewz 22 August 2018 в 02:10
поделиться
  • 1
    Очень интересно, спасибо за обмен! всегда интересующийся этим типом добавляет к языку. – Hassek 9 December 2015 в 17:54
16
ответ дан Community 22 August 2018 в 02:10
поделиться

Python напрямую не поддерживает переменную интерполяцию. Это означает, что в нем нет определенной функциональности (а именно, вызова функции в строках), которую поддерживают другие языки.

Итак, на самом деле нет ничего, что можно сказать здесь, кроме как нет, вы не можете этого сделать. Это не так, как работает синтаксис форматирования Python

.

Самое лучшее, что у вас есть:

"my request url was {0}".format(request.get_full_path())
6
ответ дан iCodez 22 August 2018 в 02:10
поделиться
  • 1
    Просто сделал редактирование, а не о объекте запроса. Я почти уверен, что вы правы в этом, мне просто нужен еще один вариант синтаксиса, который, я думаю, не существует :( – Hassek 5 November 2013 в 21:07

Как насчет этой очень странной вещи?

"my request url was %s and my post was %s"\
    % (lambda r: (r.get_full_path(), r.POST))(request)

Объяснение:

  1. Классический способ форматирования
  2. Лямбда-функция, которая принимает запрос и возвращает кортеж с тем, что вы хотите
  3. Вызвать lambda inline в качестве аргументов для вашей строки.

Я по-прежнему предпочитаю, как вы это делаете.

Если вы хотите читать, вы можете это сделать:

path, post = request.get_full_path(), request.POST
"my request url was {} and my post was {}".format(path, post)
1
ответ дан Paulo Bu 22 August 2018 в 02:10
поделиться
  • 1
    Да, я думаю, что это просто не стоит этого. Я больше ищут синтаксис, который разрешен там, например, для форматирования datetime, который вы можете сделать {:%Y}, и он работает. – Hassek 5 November 2013 в 20:46
  • 2
    Мне жаль, что все, что у меня есть :) Я не думаю, что Python до сих пор. В частности, он не известен своей интерполяцией / форматированием строк в любом случае: / – Paulo Bu 5 November 2013 в 20:49
  • 3
    Я просто оставлю вопрос открытым, но мои надежды низки на этом :( – Hassek 5 November 2013 в 20:55
Другие вопросы по тегам:

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