답변:
보간에 사용되거나 자연 언어 메시지 인 작은 따옴표와 같은 문자열에 작은 따옴표를 사용하고 싶지만 문자열에 따옴표가 있거나 잊어 버린 경우 규칙을 위반합니다. 필요하지 않더라도 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
https://docs.python.org/2.0/ref/strings.html 에서 공식 문서 인용 :
일반 영어 : 문자열 리터럴은 작은 따옴표 ( ') 또는 큰 따옴표 ( ")로 묶을 수 있습니다.
따라서 차이가 없습니다. 대신 사람들은 상황에 맞는 스타일을 선택 하고 일관성을 유지하도록 지시합니다 . 그리고 나는 동의합니다-당신이 새로운 이민자를 혼란스럽게 할 것이므로 이런 종류의 일에 대해 "수녀원"을 생각해내는 것은 무의미하다고 덧붙입니다.
내가 선호하는 데 사용 '
특히 위해, '''docstrings'''
내가 발견하면, """this creates some fluff"""
. 또한 스위스 독일어 키보드 '
의 Shift키 없이 입력 할 수 있습니다 .
이후 PEP 257"""docstrings"""
을 준수하기 위해 삼중 따옴표를 사용하도록 변경했습니다 .
"
PC QWERTY 키보드에서만 Shift 키가 필요합니다. 키보드에서는 "
실제로 입력하기가 더 쉽습니다.
가지고있는 문자열에 하나가 포함되어 있으면 다른 것을 사용해야합니다. 예를 들어, "You're able to do this"
또는 'He said "Hi!"'
. 그 외에는 모듈 내, 패키지 내, 프로젝트 내, 조직 내에서 가능한 한 일관성이 있어야합니다.
C / C ++로 작업하는 사람들이 코드를 읽을 경우 (또는 해당 언어와 Python간에 전환하는 경우) ''
단일 문자 문자열을 사용하고 ""
긴 문자열을 사용하면 전환이 쉬워 질 수 있습니다. (교환 할 수없는 다른 언어를 따르는 것과 마찬가지로).
나는 야생에서 본 적이 파이썬 코드를 선호하는 경향이 "
이상 '
하지만 약간. 한 가지 예외는 내가 본 """these"""
것보다 훨씬 흔 '''these'''
합니다.
삼중 인용 주석은이 질문의 흥미로운 하위 주제입니다. PEP 257은 doc 문자열에 삼중 따옴표를 지정합니다 . 나는 Google 코드 검색을 사용하여 빠른 검사를하고 있음을 발견 파이썬에서 트리플 따옴표가 인기로 10 배에 관하여이다 삼중 따옴표 - 코드 구글의 색인에서 131K 발생 대 1.3M. 따라서 멀티 라인의 경우 트리플 더블 따옴표를 사용하면 코드가 사람들에게 더 친숙 할 것입니다.
"If you're going to use apostrophes,
^
you'll definitely want to use double quotes".
^
그 간단한 이유로 나는 항상 큰 따옴표를 외부에 사용합니다. 항상
보풀에 대해 말하면, 아포스트로피를 나타 내기 위해 이스케이프 문자를 사용해야하는 경우 '로 문자열 리터럴을 간소화하는 것이 무엇입니까? 소설을 읽는 것이 코더를 불쾌하게합니까? 고등학교 영어 수업이 얼마나 고통 스러웠는지 상상할 수 없습니다!
파이썬은 다음과 같이 따옴표를 사용합니다.
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'
"""This is a string with "quotes""""
SyntaxError를 발생시킵니다. 이 상황을 어떻게 해결할 수 있습니까? (와 동일 '''This is a string with 'quotes''''
)
'''This is a string with "quotes"'''
.
아마도 무엇보다 문체 선호가 될 것입니다. 방금 PEP 8을 확인했는데 작은 따옴표와 큰 따옴표에 대한 언급이 없었습니다.
작은 따옴표를 선호합니다. 두 개가 아닌 하나의 키 입력 만 있기 때문입니다. 즉, 작은 따옴표를 만들기 위해 Shift 키를 으 깨지 않아도됩니다.
Perl에서는 변수를 보간하거나 \ n, \ t, \ r 등과 같은 이스케이프 문자가 필요없는 문자열이있을 때 작은 따옴표를 사용하려고합니다.
PHP는 Perl과 동일한 구별을합니다. 작은 따옴표로 묶인 내용은 값을 인쇄 할 변수를 포함 할 수있는 큰 따옴표와 달리 해석되지 않습니다 (\ n조차 변환되지 않음).
파이썬은 두렵지 않습니다. 기술적으로 볼 때, 파이썬에서 변수와 이름 / 텍스트를 분리하는 $ 토큰 (또는 이와 유사한 것)은 없습니다. 두 기능 모두 파이썬을 더 읽기 쉽고 혼란스럽게 만듭니다. 작은 따옴표와 큰 따옴표는 파이썬에서 서로 바꿔 사용할 수 있습니다.
r
문자열 리터럴 앞에 추가하여 원시 문자열을 만들지 않는 한 . 따라서 print 'a\nb'
두 줄 print r'a\nb'
을 인쇄 하지만 한 줄 을 인쇄합니다.
나는 당시에 내 공상을 공격하는 모든 것을 사용한다. 변덕에 두 사람 사이를 전환하는 것이 편리합니다!
물론, 따옴표 characetrs를 인용 할 때, 둘 사이의 전환은 결국 그렇게 기발하지 않을 수도 있습니다 ...
팀의 취향 또는 프로젝트의 코딩 지침.
다국어 환경에있는 경우 예를 들어 다른 언어에서 사용하는 문자열에 동일한 유형의 따옴표를 사용하도록 권장 할 수 있습니다. 그렇지 않으면, 나는 개인적으로 '
나는 픽셀과 놀라움을 모두 최소화하는 것을 목표로합니다. 나는 일반적으로 '
픽셀을 최소화하기 위해 선호 하지만 "
문자열에 아포스트로피가 있으면 픽셀을 다시 최소화합니다. 문서화 문자열 위해, 그러나, 내가 선호 """
이상 '''
후자는, 표준이 아닌 드문, 따라서 놀라운 일이기 때문이다. 이제 "
위의 논리에 따라 사용 된 문자열이 있지만 a로도 벗어날 수있는 문자열이 있으면 일관성을 유지하고 놀라움을 최소화하기 위해 '
계속 사용할 수 있습니다 "
.
아마도 픽셀 최소화 철학을 다음과 같은 방식으로 생각하는 것이 도움이 될 것입니다. 당신은 영어 문자처럼 보였다겠습니까 오히려 것을 A B C
나 AA BB CC
? 후자의 선택은 비어 있지 않은 픽셀의 50 %를 낭비합니다.
'
= "
/
= \
=\\
예 :
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의 경로와 관련하여 슬래시는 같은 방식으로 해석됩니다. 분명히 문자열 자체는 다릅니다. 그래도 외부 장치에서 이러한 방식으로 처리된다는 보장은 없습니다.
os.path.join()