파이썬에서 작은 따옴표와 큰 따옴표 [닫기]


718

문서에 따르면, 그들은 거의 상호 교환 가능합니다. 다른 것을 사용하는 문체 적 이유가 있습니까?

답변:


525

보간에 사용되거나 자연 언어 메시지 인 작은 따옴표와 같은 문자열에 작은 따옴표를 사용하고 싶지만 문자열에 따옴표가 있거나 잊어 버린 경우 규칙을 위반합니다. 필요하지 않더라도 docstring에는 삼중 큰 따옴표를 사용하고 정규 표현식에는 원시 문자열 리터럴을 사용합니다.

예를 들면 다음과 같습니다.

LIGHT_MESSAGES = {
    'English': "There are %(number_of_lights)s lights.",
    'Pirate':  "Arr! Thar be %(number_of_lights)s lights."
}

def lights_message(language, number_of_lights):
    """Return a language-appropriate string reporting the light count."""
    return LIGHT_MESSAGES[language] % locals()

def is_pirate(message):
    """Return True if the given message sounds piratical."""
    return re.search(r"(?i)(arr|avast|yohoho)!", message) is not None

4
흥미롭게도 나는 그것들을 정확히 같은 방식으로 사용합니다. 나는 그 방향으로 나를 조금씩 움직일 것을 읽은 것을 기억하지 못한다. 또한 원시 HTML과 같이 인간을 대상으로하지 않는 긴 문자열에는 삼중 작은 따옴표를 사용합니다. 아마도 영어 인용 규칙과 관련이있을 수 있습니다.
Mike A

12
대부분의 파이썬 코더는 그런 식으로 코딩합니다. 명확한 규칙은 없지만 코드를 자주 읽는 방식이므로 습관이됩니다.
e-satis

기호와 같은 것들에 대한 작은 따옴표가 실제로 Lisp / Scheme의 따옴표 표현식 바로 가기에서 오는지 궁금합니다. 어쨌든 직관적입니다. 또한 PEP 8 스타일 지침을 따르는 경우 함수 이름을 lights_message () 및 is_pirate ()로 지정해야합니다.
yukondude

8
Perl은 작은 따옴표로 묶은 문자열 (보간 없음)과 큰 따옴표로 묶은 문자열 (보간 포함)을 구별했으며 파이썬 코더는 습관을 물려 받았거나 결코 보내지 않을 것이라고 생각합니다.
Daren Thomas

2
나는 동일한 규칙을 사용하고 vim이 삼중 작은 따옴표 안의 모든 것을 SQL로 강조 표시하여 악용합니다.
RoundTower

96

https://docs.python.org/2.0/ref/strings.html 에서 공식 문서 인용 :

일반 영어 : 문자열 리터럴은 작은 따옴표 ( ') 또는 큰 따옴표 ( ")로 묶을 수 있습니다.

따라서 차이가 없습니다. 대신 사람들은 상황에 맞는 스타일을 선택 하고 일관성을 유지하도록 지시합니다 . 그리고 나는 동의합니다-당신이 새로운 이민자를 혼란스럽게 할 것이므로 이런 종류의 일에 대해 "수녀원"을 생각해내는 것은 무의미하다고 덧붙입니다.


3
예, 저에게는 일관성이 핵심이므로 모든 곳에서 싱글을 사용합니다. 명확하고 일관된 키 누름이 적습니다.
mlissner

90

내가 선호하는 데 사용 '특히 위해, '''docstrings'''내가 발견하면, """this creates some fluff""". 또한 스위스 독일어 키보드 'Shift키 없이 입력 할 수 있습니다 .

이후 PEP 257"""docstrings""" 을 준수하기 위해 삼중 따옴표를 사용하도록 변경했습니다 .


2
매일 SQL 코드를 작성하기 때문에 작은 따옴표를 선호하는 경향이 있으며 작은 따옴표는 T-SQL의 문자열 리터럴에 사용됩니다. 그러나 docstring은 때로는 약간의 보풀을 사용할 수 있기 때문에 삼중 큰 따옴표를 사용합니다.
eksortso

4
문자열에 간단한 따옴표를 사용하면 '#if 0'과 '#endif'와 같은 세 개의 큰 따옴표를 사용하여 소스 코드의 일부를 비활성화 할 수 있습니다.
dim

12
"PC QWERTY 키보드에서만 Shift 키가 필요합니다. 키보드에서는 "실제로 입력하기가 더 쉽습니다.
전자 Satis

6
내 keybord에 "와 '둘 다 Shift 키가 필요합니다.
Loïc Faure-Lacroix

10
이 답변은 파이썬 규칙과 반대입니다. 일관성을 유지하려면 항상 docstring 주위에 "" "triple double quotes" ""를 사용하십시오. python.org/dev/peps/pep-0257
Buttons840

44

나는 윌과 함께 있습니다.

  • 텍스트에 대한 큰 따옴표
  • 식별자처럼 행동하는 모든 것에 대한 작은 따옴표
  • 정규 표현식에 대한 큰 따옴표로 묶인 원시 문자열 리터럴
  • 문서화 문자열에 대한 삼중 큰 따옴표

나는 그것이 많은 탈출을 의미하더라도 그것을 고수 할 것입니다.

따옴표로 인해 작은 따옴표로 묶은 식별자 중에서 가장 큰 가치를 얻습니다. 나머지 관행은 작은 따옴표로 묶은 식별자에 서있는 방을 제공하기 위해 있습니다.


26

가지고있는 문자열에 하나가 포함되어 있으면 다른 것을 사용해야합니다. 예를 들어, "You're able to do this"또는 'He said "Hi!"'. 그 외에는 모듈 내, 패키지 내, 프로젝트 내, 조직 내에서 가능한 한 일관성이 있어야합니다.

C / C ++로 작업하는 사람들이 코드를 읽을 경우 (또는 해당 언어와 Python간에 전환하는 경우) ''단일 문자 문자열을 사용하고 ""긴 문자열을 사용하면 전환이 쉬워 질 수 있습니다. (교환 할 수없는 다른 언어를 따르는 것과 마찬가지로).

나는 야생에서 본 적이 파이썬 코드를 선호하는 경향이 "이상 '하지만 약간. 한 가지 예외는 내가 본 """these"""것보다 훨씬 흔 '''these'''합니다.


21

삼중 인용 주석은이 질문의 흥미로운 하위 주제입니다. PEP 257은 doc 문자열에 삼중 따옴표를 지정합니다 . 나는 Google 코드 검색을 사용하여 빠른 검사를하고 있음을 발견 파이썬에서 트리플 따옴표가 인기로 10 배에 관하여이다 삼중 따옴표 - 코드 구글의 색인에서 131K 발생 대 1.3M. 따라서 멀티 라인의 경우 트리플 더블 따옴표를 사용하면 코드가 사람들에게 더 친숙 할 것입니다.


13
"If you're going to use apostrophes, 
       ^

you'll definitely want to use double quotes".
   ^

그 간단한 이유로 나는 항상 큰 따옴표를 외부에 사용합니다. 항상

보풀에 대해 말하면, 아포스트로피를 나타 내기 위해 이스케이프 문자를 사용해야하는 경우 '로 문자열 리터럴을 간소화하는 것이 무엇입니까? 소설을 읽는 것이 코더를 불쾌하게합니까? 고등학교 영어 수업이 얼마나 고통 스러웠는지 상상할 수 없습니다!


11
'당신이 무언가를 인용 할 예정이라면 반드시 작은 따옴표를 사용하고 싶을 것입니다'
Paolo

내가 쓴 이후로 내 의견이 크게 바뀌 었습니다. 이제는 큰 따옴표를 사용한다고 주장하는 상황 중 하나입니다. 작은 따옴표를 사용하는 맥락에서 또 다른 것이 될 것입니다. 참조 허용 대답 보다 상세하게이 문제에 나의 현재 입장에 있습니다. 나는 그것이 그것이 많은 사람들에게 어떻게 표현되어야 하는지를 보여주는 훌륭한 예라고 생각합니다.
Droogans

7

파이썬은 다음과 같이 따옴표를 사용합니다.

mystringliteral1="this is a string with 'quotes'"
mystringliteral2='this is a string with "quotes"'
mystringliteral3="""this is a string with "quotes" and more 'quotes'"""
mystringliteral4='''this is a string with 'quotes' and more "quotes"'''
mystringliteral5='this is a string with \"quotes\"'
mystringliteral6='this is a string with \042quotes\042'
mystringliteral6='this is a string with \047quotes\047'

print mystringliteral1
print mystringliteral2
print mystringliteral3
print mystringliteral4
print mystringliteral5
print mystringliteral6

다음과 같은 결과가 나타납니다.

this is a string with 'quotes'
this is a string with "quotes"
this is a string with "quotes" and more 'quotes'
this is a string with 'quotes' and more "quotes"
this is a string with "quotes"
this is a string with 'quotes'

2
그러나 """This is a string with "quotes""""SyntaxError를 발생시킵니다. 이 상황을 어떻게 해결할 수 있습니까? (와 동일 '''This is a string with 'quotes'''')
dolma33

1
"quotes"와 "" "사이에 줄 바꿈 삽입
Nicolas

1
@ dolma33 Nicolas의 제안은 문자열의 내용을 바꿀 것입니다. 더 나은 해결책은 이미 답에 있습니다. 문자열이 어떤 종류의 따옴표로 끝나면 다른 종류의 삼중 따옴표를 사용하십시오 . 예, '''This is a string with "quotes"'''.
jpmc26

3

나는 일반적으로 큰 따옴표를 사용하지만 특별한 이유는 없습니다. 아마도 Java의 습관이 아닙니다.

큰 따옴표를 사용하는 것보다 인라인 리터럴 문자열로 아포스트로피를 원할 가능성이 더 큽니다.


3

개인적으로 나는 하나 또는 다른 것을 고수합니다. 중요하지 않습니다. 그리고 당신이 공동 작업을 할 때 다른 사람들을 혼동하는 것입니다.


2

아마도 무엇보다 문체 선호가 될 것입니다. 방금 PEP 8을 확인했는데 작은 따옴표와 큰 따옴표에 대한 언급이 없었습니다.

작은 따옴표를 선호합니다. 두 개가 아닌 하나의 키 입력 만 있기 때문입니다. 즉, 작은 따옴표를 만들기 위해 Shift 키를 으 깨지 않아도됩니다.


1
PEP 8은 "Documentation Strings"의 첫 문장에서 PEP 257에 연결됩니다. PEP 257의 내용은 다음과 같습니다. 일관성을 위해 항상 docstring 주위에 "" "triple double quotes" ""를 사용하십시오. docstring에 백 슬래시를 사용하려면 r "" "raw triple double quotes" ""를 사용하십시오. 유니 코드 docstring의 경우 u "" "Unicode triple-quoted strings" ""를 사용하십시오. 아직도, 나는 작은 따옴표의 깔끔한 모습과 당신이 주신 한 가지 핵심적인 이유를 좋아합니다.
maxpolk

2

Perl에서는 변수를 보간하거나 \ n, \ t, \ r 등과 같은 이스케이프 문자가 필요없는 문자열이있을 때 작은 따옴표를 사용하려고합니다.

PHP는 Perl과 동일한 구별을합니다. 작은 따옴표로 묶인 내용은 값을 인쇄 할 변수를 포함 할 수있는 큰 따옴표와 달리 해석되지 않습니다 (\ n조차 변환되지 않음).

파이썬은 두렵지 않습니다. 기술적으로 볼 때, 파이썬에서 변수와 이름 / 텍스트를 분리하는 $ 토큰 (또는 이와 유사한 것)은 없습니다. 두 기능 모두 파이썬을 더 읽기 쉽고 혼란스럽게 만듭니다. 작은 따옴표와 큰 따옴표는 파이썬에서 서로 바꿔 사용할 수 있습니다.


당신이 말하는 것을 강화하기 위해 \ n은 PHP와 Perl에서 큰 따옴표로만 해석되는 반면, 파이썬에서는 큰 따옴표와 작은 따옴표로 모두 작동합니다
stivlo

1
@ stivlo : r문자열 리터럴 앞에 추가하여 원시 문자열을 만들지 않는 한 . 따라서 print 'a\nb'두 줄 print r'a\nb'을 인쇄 하지만 한 줄 을 인쇄합니다.
Tadeck


1

나는 당시에 내 공상을 공격하는 모든 것을 사용한다. 변덕에 두 사람 사이를 전환하는 것이 편리합니다!

물론, 따옴표 characetrs를 인용 할 때, 둘 사이의 전환은 결국 그렇게 기발하지 않을 수도 있습니다 ...


0

팀의 취향 또는 프로젝트의 코딩 지침.

다국어 환경에있는 경우 예를 들어 다른 언어에서 사용하는 문자열에 동일한 유형의 따옴표를 사용하도록 권장 할 수 있습니다. 그렇지 않으면, 나는 개인적으로 '


0

내가 아는 한 일부 코드를 살펴보면 ""가 텍스트 문자열에 일반적으로 사용되며 ( '보다 텍스트 내부에서'가 더 일반적이라고 생각합니다.) ''가 해시 키와 같은 곳에 나타납니다.


0

나는 픽셀과 놀라움을 모두 최소화하는 것을 목표로합니다. 나는 일반적으로 '픽셀을 최소화하기 위해 선호 하지만 "문자열에 아포스트로피가 있으면 픽셀을 다시 최소화합니다. 문서화 문자열 위해, 그러나, 내가 선호 """이상 '''후자는, 표준이 아닌 드문, 따라서 놀라운 일이기 때문이다. 이제 "위의 논리에 따라 사용 된 문자열이 있지만 a로도 벗어날 수있는 문자열이 있으면 일관성을 유지하고 놀라움을 최소화하기 위해 '계속 사용할 수 있습니다 ".

아마도 픽셀 최소화 철학을 다음과 같은 방식으로 생각하는 것이 도움이 될 것입니다. 당신은 영어 문자처럼 보였다겠습니까 오히려 것을 A B CAA BB CC? 후자의 선택은 비어 있지 않은 픽셀의 50 %를 낭비합니다.


-1

나는 Bash를 제외한 대부분의 언어 (C ++, Java, VB ...)에서 수년 동안 그렇게 했으므로 큰 따옴표를 사용합니다. 일반 텍스트에도 큰 따옴표를 사용하고 영어가 아닌 (수정 된) 영어 키보드를 사용하고 있기 때문에 두 문자 모두 Shift 키가 필요합니다.


-4

' = "

/= \=\\

예 :

f = open('c:\word.txt', 'r')
f = open("c:\word.txt", "r")
f = open("c:/word.txt", "r")
f = open("c:\\\word.txt", "r")

결과는 같습니다

= >> 아니요, 동일하지 않습니다. 단일 백 슬래시는 문자를 이스케이프합니다. 당신은 그것 때문에 예로부터 행운이 일어날 \k\w같은 유효 탈출이 없습니다 \t또는 \n또는 \\또는\"

단일 백 슬래시를 사용하려면 (및 이와 같이 해석하려면) "원시"문자열을 사용해야합니다. r문자열 앞에 ' '를 넣으면됩니다.

im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'

Windows의 경로와 관련하여 슬래시는 같은 방식으로 해석됩니다. 분명히 문자열 자체는 다릅니다. 그래도 외부 장치에서 이러한 방식으로 처리된다는 보장은 없습니다.


이런 헛소리는 오래되었지만 어쨌든 슬래시를 사용하면 Windows에서는 작동하지만 여전히 시스템에 따라 다릅니다. 운영 체제 의존성을 없애려면os.path.join()
Adam Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.