2014-04-09 15 views
8

Obecnie, aby dodać pojedyncze cudzysłowy wokół sznurka, najlepszym rozwiązaniem, jakie wymyśliłem, było utworzenie małej funkcji otoki.Python 2.X dodawanie pojedynczych cudzysłowów wokół ciągu znaków

def foo(s1): 
    return "'" + s1 + "'" 

Czy jest to łatwiejsze w pythonic sposób to zrobić?

+2

Jaki jest kontekst (powody/dlaczego) do robienia tego? Co jeśli twój ciąg zawiera cytaty? W każdym razie spróbuj 's1 .__ repr __()' z różnymi ciągami i sprawdź, czy to zachowanie pasuje do wymaganego użycia. – metatoaster

+0

@metatoaster Zasadniczo muszę łączyć wiele łańcuchów '+ ', niektóre z nich wymagają pojedynczych cudzysłowów, a niektóre nie, aby zaoszczędzić przestrzeń liniową, wymyśliłem powyższe rozwiązanie. – pyCthon

+1

Co jeśli masz ciąg dopasowujący Twoje pojedyncze kryteria cytowania, ale ma też pojedynczy cytat (taki jak 'that's'), użycie twojej metody spowoduje" to ". Czy jest to zamierzone/dopuszczalne dla twojego systemu? Zalecane jest również użycie 'str.join' zamiast listy łańcuchów zamiast" + "do dodawania pojedynczych fragmentów napisów ze względu na wydajność. – metatoaster

Odpowiedz

10

Oto kolejny (chyba bardziej pythonic) opcja, za pomocą format strings:

def foo(s1): 
    return "'{}'".format(s1) 
12

Co o:

def foo(s1): 
    return "'%s'" % s1 
+0

Ten element został oznaczony jako post o niskiej jakości przez Stackoverflow Komentarz jest tylko jednym ze standardowych wycinarek plików cookie z SO – Rico

+0

Ta składnia dla ciągów formatów została uznana za przestarzałą, na korzyść użycia metody 'format()', jak pokazano w moim Odpowiedź –

+5

@Rico: To jest oczywiście odpowiedź.W razie wątpliwości, proszę nie przeglądać i zdecydowanie nie publikuj komentarzy cookie cutter dla nich samych. – BoltClock

8

Chciałem tylko podkreślić to, co @metatoaster powiedział w komentarzu powyżej, ponieważ brakowało mi go najpierw.

Użycie repr (string) spowoduje dodanie pojedynczych cudzysłowów, a następnie podwójne cudzysłowy poza tym, a następnie pojedyncze cudzysłowy poza tymi z wewnętrznymi pojedynczymi apostrofami, a następnie na inne znaki ucieczki.

Korzystanie repr(), jako wbudowany, jest bardziej bezpośredni, chyba że istnieją inne konflikty ..

s = 'strOrVar' 
print s, repr(s), repr(repr(s)), ' ', repr(repr(repr(s))), repr(repr(repr(repr(s)))) 

# prints: strOrVar 'strOrVar' "'strOrVar'" '"\'strOrVar\'"' '\'"\\\'strOrVar\\\'"\'' 

Stan docs jego stan zasadzie repr(), czyli reprezentacja jest odwrotnością eval()

„Dla wielu rodzajów, ta funkcja jest próbą powrotu ciąg dałyby obiekt o takiej samej wartości, gdy przechodzi do eval() ..”

Kopie wzorca będą krótsze, ale w języku Python 3+ mają wartość removed. Co ciekawe, StackOverflow wykorzystuje backquotes do określenia rozpiętości kodu, zamiast podświetlać blok kodu i klikając przycisk kodu - ma jednak pewne ciekawe zachowanie.

Powiązane problemy