Згідно з документацією, вони в значній мірі взаємозамінні. Чи є стилістична причина використовувати одне над іншим?
Згідно з документацією, вони в значній мірі взаємозамінні. Чи є стилістична причина використовувати одне над іншим?
Відповіді:
Мені подобається використовувати подвійні лапки навколо рядків, які використовуються для інтерполяції або є природними повідомленнями мови, та одинарні цитати для невеликих символьних рядків, але порушуватиму правила, якщо рядки містять лапки або якщо я забуду. Я використовую потрійні подвійні лапки для docstrings та необмежених рядкових літералів для регулярних виразів, навіть якщо вони не потрібні.
Наприклад:
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клавіші на моїй швейцарській німецькій клавіатурі.
З тих пір я перейшов на використання потрійних лапок """docstrings"""
, щоб відповідати PEP 257 .
"
потрібна клавіша переключення лише на клавіатурі ПК QWERTY. На моїй клавіатурі "
насправді простіше набрати.
Я з Віллом:
Я буду дотримуватися цього, навіть якщо це означає багато втечі.
Я отримую найбільшу цінність з одного цитованих ідентифікаторів, які виділяються через цитати. Решта практик існують лише для того, щоб дати тим самим ідентифікованим ідентифікованим ідентифікаторам деяку кімнату.
Якщо рядок, який у вас є, містить один, то ви повинні використовувати інший. Наприклад "You're able to do this"
, або 'He said "Hi!"'
. Крім цього, ви просто повинні бути настільки послідовними, наскільки це можливо (в рамках модуля, в пакеті, в рамках проекту, в організації).
Якщо ваш код читатимуть люди, які працюють з C / C ++ (або якщо ви переходите між цими мовами та Python), то використання ''
для односимвольних рядків та ""
довших рядків може полегшити перехід. (Так само для дотримання інших мов, де вони не взаємозамінні).
Код Python , я бачив в дикій природі , як правило , на користь "
більш '
, але тільки трохи. Єдиний виняток - """these"""
це набагато частіше, ніж те '''these'''
, що я бачив.
Потрійні цитовані коментарі - цікава підтема цього питання. PEP 257 задає потрійні лапки для рядків doc . Я зробив швидку перевірку за допомогою Google Code Search і виявив, що потрійні подвійні лапки в Python приблизно в 10 разів настільки ж популярні, як потрійні одинарні лапки - 1,3 М проти 131 К випадків у індексах Google. Тож у багаторядковому випадку ваш код, мабуть, стане більш відомим людям, якщо він використовує потрійні подвійні лапки.
"If you're going to use apostrophes,
^
you'll definitely want to use double quotes".
^
З цієї простої причини я завжди використовую подвійні лапки зовні. Завжди
Якщо говорити про пух, що корисного полягає в упорядкуванні ваших рядкових буквених знаків «якщо вам доведеться використовувати символи втечі, щоб представляти апострофи? Чи ображає кодерів читання романів? Я не уявляю, наскільки болючим для вас був клас середньої школи англійської мови!
Python використовує цитати приблизно так:
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"'''
.
Я в основному використовую подвійні лапки, але не з якоїсь конкретної причини - Мабуть, просто за звичкою від Java.
Я думаю, ви також більше шанси на те, що вам захочеться апострофів у вбудованому прямому рядку, ніж ви хочете подвійних лапок.
Це, мабуть, стилістичне уподобання більше ніж усе. Я щойно перевірив PEP 8 і не побачив жодної згадки про одиничні проти подвійних лапок.
Я віддаю перевагу одинарним цитатам, оскільки це лише один натискання клавіші замість двох. Тобто, мені не потрібно розминати клавішу shift, щоб зробити єдину цитату.
У Perl ви хочете використовувати одиничні лапки, коли у вас є рядок, який не потребує інтерполяції змінних чи символів, що увійшли, наприклад \ n, \ t, \ r тощо.
PHP робить те саме, що і Perl: вміст в одиничних лапках не буде інтерпретуватися (навіть \ n не буде перетворено), на відміну від подвійних лапок, які можуть містити змінні, щоб їх значення було роздруковано.
Пітон не боїться. Технічно видно, немає $-маркер (або подібного), щоб відокремити ім'я / текст від змінної в Python. Обидві функції роблять Python більш зрозумілим, менш заплутаним, зрештою. Одиничні та подвійні лапки можуть бути взаємозамінно використані в Python.
r
перед ним буквальний рядок. Тож print 'a\nb'
надрукуємо вам два рядки, але print r'a\nb'
надрукуємо вам один.
Я вирішив використовувати подвійні лапки, тому що їх легше бачити.
Я просто використовую те, що вражає мою фантазію в той час; зручно мати можливість перемикатися між цими двома примхами!
Зрозуміло, коли цитують цінаристів, перемикання між ними може бути не таким примхливим…
Смак вашої команди чи рекомендації щодо кодування вашого проекту.
Якщо ви перебуваєте в багатомовній обстановці, можливо, ви захочете заохочувати використання однотипних лапок для рядків, якими користується, наприклад, інша мова. Інше, мені особисто найбільше подобається зовнішній вигляд '
Я прагну мінімізувати як пікселі, так і здивувати. Я, як правило, віддаю перевагу '
, щоб мінімізувати пікселі, але "
замість цього, якщо рядок має апостроф, знову ж таки, щоб мінімізувати пікселі. Однак для докстрингу я віддаю перевагу """
над '''
тим, що останній нестандартний, нечастий і тому дивний. Якщо зараз у мене є купа струн, де я використовувався "
відповідно до вищеописаної логіки, але також та, яка може піти з a '
, я все одно можу використовувати "
в ній збереження послідовності, тільки щоб мінімізувати здивування.
Можливо, це допомагає мислити філософію мінімізації пікселів наступним чином. Ви б хотіли, щоб англійські символи виглядали A B C
чи AA BB CC
? Останній вибір витрачає 50% не порожніх пікселів.
Я використовую подвійні лапки, тому що роблю це протягом багатьох років на більшості мов (C ++, Java, VB ...), крім Bash, тому що я також використовую подвійні лапки в звичайному тексті і тому, що я використовую (модифіковану) неанглійську клавіатуру, де обом символам потрібна клавіша shift.
'
= "
/
= \
=\\
приклад:
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()