2011-12-20 20 views
25

Mam naprawdę długą ciąg znaków w Pythonie:Jak zadeklarować długi ciąg znaków w Pythonie?

long_string = ' 
this is a really 
really 
really 
long 
string 
' 

Jednakże, ponieważ łańcuch obejmuje wiele linii, Python nie rozpoznaje to jako ciąg. Jak to naprawić?

+1

Umieść go w "" "" ... "" ". '' "" long-long-string "" " – khachik

+0

Czy nie są potrójne cytaty zarezerwowane dla ciągów doc? – ffledgling

+2

@ffledgling jest zarezerwowany dla ciągów wielowierszowych, które są używane dla ciągów dokumentów – Winand

Odpowiedz

32
long_string = ''' 
this is a really 
really 
really 
long 
string 
''' 

""" robi to samo.

+3

W przypadku, gdy wcięcie linii smyczkowych sprawia, że ​​kod jest bardziej czytelny, możesz użyć 'dedent ', aby usunąć wcięcie w wynikowym łańcuchu. – IanS

20

Można użyć

long_string = 'fooo' \ 
'this is really long' \ 
'string' 

lub jeśli trzeba linebreaks

long_string_that_has_linebreaks = '''foo 
this is really long 
''' 
+4

Również dla twojej pierwszej opcji, jeśli masz nawiasy okrągłe, nie potrzebujesz odwrotnych ukośników. Zwróć jednak uwagę na dużą wadę z użyciem konkatenacji ciągów: chyba że naprawdę uważasz na przestrzenie, które mogłyby się skończyć "' fooothis jest naprawdę długim łańcuchem ", co prawdopodobnie nie było tym co chciałeś. – Duncan

66

Można też to zrobić, co jest dobre, bo masz lepszą kontrolę nad spacji wewnątrz łańcucha:

long_string = (
    'Lorem ipsum dolor sit amet, consectetur adipisicing elit, ' 
    'sed do eiusmod tempor incididunt ut labore et dolore magna ' 
    'aliqua. Ut enim ad minim veniam, quis nostrud exercitation ' 
    'ullamco laboris nisi ut aliquip ex ea commodo consequat. ' 
    'Duis aute irure dolor in reprehenderit in voluptate velit ' 
    'esse cillum dolore eu fugiat nulla pariatur. Excepteur sint ' 
    'occaecat cupidatat non proident, sunt in culpa qui officia ' 
    'deserunt mollit anim id est laborum.' 
) 
+2

Rzeczywiście, jest to jedna z rzeczy, które wpadłem, gdy chciałem tworzyć krotki z jednego elementu;) – plaes

+0

To wydaje się nie działać w chwili, gdy potrzeba żadnych oceniana wartość, która nie jest ciągiem. Zazwyczaj dla mnie, gdy używam rozumienia list, aby implodować złożone dane w łańcuch; i nie znalazłem sposobu na połączenie takiego wyrażenia z tym stylem definicji łańcucha. :( – ThorSummoner

+0

Możesz także użyć long_string = textwrap.dedent ("'' długi łańcuch z każdą wciętą linią '' ') https://docs.python.org/3/library/textwrap.html#textwrap.dedent – moorecm

4

Udało mi się również sprawić, aby działało w ten sposób.

long_string = '\ 
this is a really \ 
really \ 
really \ 
long \ 
string\ 
' 

Nie mogę znaleźć żadnych odniesień online do tego sposobu konstruowania ciągu wieloliniowego. Nie wiem, czy to prawda. Podejrzewam, że pyton ignoruje znak nowej linii z powodu odwrotnego ukośnika? Może ktoś może rzucić na to światło.

+1

Sublime Text (Build 3114) wydaje się mieć problemy z podświetleniem składni tego. –

Powiązane problemy