Pojedyncze cytaty vs podwójne cytaty [zamknięte]

79

Właśnie zacząłem pracę, w której piszę Python po pochodzeniu z języka Java i zauważam, że inni programiści często cytują łańcuchy używając pojedynczych cudzysłowów ( '') zamiast podwójnych cudzysłowów ( ""). Na przykład:

line1 = 'This is how strings typically look.'
line2 = "Not like this."

Czy jest jakiś szczególny powód tego, poza osobistymi preferencjami? Czy to właściwy sposób na cytowanie ciągów? W szczególności chcę wiedzieć, czy istnieje jakiś typ standardowych lub przyjętych najlepszych praktyk, które napędzają ten styl kodowania.

Eric Hydrick
źródło
5
Jeśli kiedykolwiek dostać się Ruby, że faktycznie jest różnica techniczna między pojedyncze i podwójne cudzysłowy. Podwójne cudzysłowy obsługują interpolację ciągów - pojedyncze cudzysłowy są traktowane jak literały.
KChaloux
5
To samo dotyczy Perla i większości powłok.
Blrfl
18
Jak to pytanie jest „mało konstruktywne”? Jako absolutny początkujący python muszę o tym wiedzieć. Jeśli piszesz skrypt bash, jest duża różnica.
Magicsowon,
19
Nie konstruktywny? Rany. Pierwszy wynik Google dla „pojedynczych podwójnych cudzysłowów w Pythonie” mówi ci, co musisz szybko wiedzieć. Dzięki, że pytasz Erica i odpowiadasz obrzydliwie
aggieNick02

Odpowiedzi:

65

Pozostałe odpowiedzi są poprawne, ponieważ nie ma to żadnej różnicy technicznej, ale widziałem jedną nieformalną regułę stylu w kilku projektach typu open source: podwójne ciągi znaków są używane dla ciągów, które mogą być ostatecznie widoczne dla użytkownika (niezależnie od tego, czy potrzebują tłumaczenie), a pojedyncze cudzysłowy dotyczą ciągów, które odnoszą się do funkcjonalności samego kodu (np. klucze dict, wyrażenia regularne, SQL).

Z pewnością nie jest to reguła uniwersalna (ani nawet skodyfikowana w PEP), więc jak każdy inny arbitralny aspekt kodowania sprowadza się do lokalnych zasad.

Zauważ, że PEP 8 (którego nie zauważyłem, kiedy napisałem tę odpowiedź) mówi :

Ten PEP nie wydaje na to rekomendacji. Wybierz regułę i trzymaj się jej. Jeśli ciąg zawiera pojedyncze lub podwójne znaki cudzysłowu, użyj drugiego, aby uniknąć ukośników odwrotnych w ciągu. Poprawia czytelność.

Jak zauważa komentator, niekoniecznie jest to sprzeczne, w zależności od tego, jak interpretujesz „zasadę”. Sugeruję, że tak naprawdę nie działa z drugą połową cytatu.

obrzydliwie
źródło
1
Może to być styl domowy, ale wbrew PEP 8: wybierz jeden i użyj go dla całego pliku, niezależnie od zawartości.
Nils von Barth
4
@NilsvonBarth PEP mówi „wybierz regułę i trzymaj się jej”, a nie „wybierz jedną ograniczającą postać i trzymaj się jej”. „Podwójne cudzysłowy dla tekstu widocznego dla użytkownika, pojedyncze cudzysłowy dla rzeczy używanych przez maszynę” wydaje się być doskonałą zasadą, której należy się trzymać.
Tanner Swett
1
@Tanner Swett Przepraszamy, masz rację; jest to przewodnik po stylu Google Python, który określa „w pliku” google.github.io/styleguide/pyguide.html#310-strings
Nils von Barth
Czarny faktycznie formatuje ciągi Pythona, aby były otoczone podwójnymi cudzysłowami. Nawet jslint chce, aby ciągi JavaSciprt były otoczone podwójnymi cudzysłowami. Większość starszych języków nigdy nawet nie udostępniała opcji. To, że możesz to zrobić, nie oznacza, że ​​powinieneś. Oczywiście jest kilka przypadków, w których jest to bardzo miła rzecz, na przykład gdy masz cytat w ciągu. Praktycznie rzecz biorąc, większość ciągów powinna pochodzić z zestawu danych, który nie jest zakodowany na stałe w bazie kodu.
Bobort
1
@bobort Nawet jeśli szukasz ciągów znaków w systemie tłumaczenia lub interfejsu użytkownika, często potrzebujesz kluczy ciągów dla tych w kodzie. Ale zgadzam się, że sprawy potoczyły się dalej i tak naprawdę to rozróżnienie nie przynosi żadnych korzyści.
detly
21

To bardzo proste:

  • Pojedyncze cytaty pozwalają na uniknięcie osadzania podwójnych cytatów.
  • Podwójne cudzysłowy pozwalają na osadzanie niezakodowanych pojedynczych cudzysłowów.

Najbardziej Pythonic jest używany '(pojedyncze cudzysłowy), dopóki nie potrzebujesz podwójnych cudzysłowów.

Poniższy cytat pochodzi bezpośrednio z dokumentacji literałów łańcuchowych.

są dostępne w ciągach znaków Unicode. Prefiks „b” lub „B” jest ignorowany w Pythonie 2; wskazuje, że literał powinien stać się literałem bajtów w Pythonie 3 (np. gdy kod jest automatycznie konwertowany z 2to3). Przedrostek „u” lub „b” może poprzedzać przedrostek „r”.

W ciągach trzykrotnie cytowanych dozwolone są nowe znaki i cudzysłowy (i są zachowywane), z tym wyjątkiem, że trzy ciągi bez cudzysłowu w rzędzie kończą ciąg. („Cudzysłów” to znak używany do otwarcia łańcucha, tj. „Lub”.)


źródło
15
Pytanie oczywiście brzmi - dlaczego Python preferuje pojedyncze cudzysłowy, kiedy prawie każdy inny język używa podwójnych cudzysłowów?
Martin Beckett,
13
@MartinBeckett, ponieważ
3
Ach, oczywiście ;-)
Martin Beckett
6
@JarrodRoberson: Myślę, że „ponieważ” (lub „ponieważ”, jeśli wolisz) jest prawidłową odpowiedzią, jeśli jest napisane jakimś PEP (lub podobnym) , że jest to sposób Pythona . W przeciwnym razie jest to tylko osobisty wybór.
Joachim Sauer
5
pojedyncze cytaty wyglądają na czystsze i nie wymagają klawisza Shift do pisania
JoelFan
17

Z technicznego punktu widzenia nie ma to znaczenia, z perspektywy stylu kilka myśli:

  • Większość innych języków programowania używa podwójnych cudzysłowów.
  • Podczas pisania w języku angielskim zwykle stosuje się podwójne cudzysłowy.
  • Pojedyncze cudzysłowy są przydatne, gdy w aplikacji jest dużo nietechnicznego / narracyjnego tekstu, ponieważ pozwalają na stosowanie podwójnych cudzysłowów w bardziej naturalny sposób. bar = '"It\'s awesome" he said.'
  • Z drugiej strony pojedynczy znak cudzysłowu jest także kilkakrotnie używany w języku angielskim. bar = "\"It's awesome\" he said."
API-Beast
źródło
Zauważ, że „jest często używany w ciągach technicznych, zbyt -e, jeśli przesłałeś„ {dumb_thing}, ale to jest zbyt głupie nawet dla nas! ”
Christian Sauer
4

Nie ma różnicy między używaniem pojedynczych i podwójnych cudzysłowów w Pythonie. W praktyce, w zależności od rodzaju danych, z którymi pracujesz, jeden lub drugi styl może być wygodniejszy.

Rodzaj cudzysłowów używany „domyślnie” (gdzie nie ma ważnego powodu, aby użyć jednego lub drugiego), jest raczej kwestią osobistych preferencji.

Aby uzyskać więcej informacji, zobacz sekcję dotyczącą literałów łańcuchowych w dokumentacji języka Python.

Greg Hewgill
źródło
4

Rozważając kilka nawyków, czy regularnie stosować pojedyncze czy podwójne cudzysłowy, należy wziąć pod uwagę kilka rzeczy.

Podwójne cudzysłowy wymagają kluczowania dwoma palcami; i dlatego bardziej prawdopodobne są błędy w pisaniu, a także zmniejszenie prędkości

Twój edytor może pokazywać jedną postać lepiej niż inną; dla łatwiejszego debugowania składni wizualnej.

Dokumenty używają potrójnych znaków: Który wygląda lepiej? „” „” „” lub „” „”

Chociaż nie widziałem tego w systemie operacyjnym Windows, niektóre narzędzia składni lub dokumentacji mogą oczekiwać podwójnych wierszy pojedynczych cudzysłowów.

W przypadku większości samouczków w języku Python widziałem coś przeciwnego do twoich doświadczeń. Zazwyczaj widzę używane podwójne cudzysłowy.

DevPlayer
źródło
4

Moim zdaniem wolę używać podwójnych cudzysłowów dla ciągu.

Dlaczego? Dla programistów innych języków można szybko dostosować i łatwiej zrozumieć kod.

Jeśli programista C zobaczy:

'Writing "It\'s big?" No.'

Będzie się wahał, zamiast:

"Writing \"It's big?\" No."
Lucio
źródło
3
„Pisanie” „Jest duży?” „Nie.”
API-Beast
@Lucio To właśnie robiłem, po prostu nie wiedziałem, czy naruszam jakiś ustalony standard języka Python, czy nie.
Eric Hydrick,
@EricHydrick Nie, możesz wybrać jedną lub drugą.
Lucio