Как работает строка с тройными кавычками в Python? - PullRequest
31 голосов
/ 05 октября 2009

Как изменить эту функцию, чтобы она возвращала "123456"?

def f():
    s = """123
    456"""
    return s

ОБНОВЛЕНИЕ: Все, вопрос в том, чтобы понять, как не иметь \ t или что-то еще, когда есть многострочный комментарий, а не как использовать модуль re.

Ответы [ 9 ]

52 голосов
/ 05 октября 2009

Не используйте строку в тройных кавычках, если вам не нужны лишние пробелы, символы табуляции и новые строки.

Используйте неявное продолжение, оно более элегантно:

def f():
    s = ('123'
         '456')
    return s
18 голосов
/ 05 октября 2009
def f():
  s = """123\
456"""
  return s

Не ставить отступы ни одной из строк цитаты после первой строки; заканчивайте каждую строку, кроме последней, обратной косой чертой.

14 голосов
/ 05 октября 2009

Последующие строки объединяются, поэтому вы можете использовать:

def f():
    s = ("123"
         "456")
    return s

Это позволит вам сохранять отступы как вам угодно.

10 голосов
/ 26 мая 2011
textwrap.dedent("""\
                123
                456""")

Из стандартной библиотеки. Первый «\» необходим, потому что эта функция работает путем удаления общего начального пробела.

7 голосов
/ 05 октября 2009

Может быть, я упускаю что-то очевидное, но как насчет этого:

def f():
    s = """123456"""
    return s

или просто так:

def f():
    s = "123456"
    return s

или даже проще:

def f():
    return "123456"

Если это не отвечает на ваш вопрос, уточните, о чем идет речь.

0 голосов
/ 09 июня 2017

Вы можете проверить это str.splitlines ([keepends])

Возвращает список строк в строке, ломающихся на границах строк. Этот метод использует универсальный подход новой строки для разделения строк. Разрывы строк не включаются в результирующий список, если keepends не дано и верно.

Python распознает "\ r", "\ n" и "\ r \ n" как границы строк для 8-битных строк.

Итак, для рассматриваемой проблемы ... мы могли бы сделать что-то вроде этого ..

>>> s = """123
... 456"""
>>> s
'123\n456'
>>> ''.join(s.splitlines())
'123456'
0 голосов
/ 05 октября 2009

Мое предположение:

def f():
    s = """123
    456"""
    return u'123456'

Минимальное изменение и делает то, что просят.

0 голосов
/ 05 октября 2009

Попробуйте

import re

, а затем

    return re.sub("\s+", "", s)
0 голосов
/ 05 октября 2009
re.sub('\D+', '', s)

вернет строку, если вам нужно целое число, преобразуйте эту строку с int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...