Одиночні та подвійні лапки [закрито]


79

Щойно я почав роботу, коли пишу Python після того, як прийшов з Java, і помічаю, що інші розробники прагнуть цитувати рядки, використовуючи одинарні лапки ( '') замість подвійних лапок ( ""). Наприклад:

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

Чи є якась причина для цього, крім особистих уподобань? Це правильний спосіб цитування рядків? Зокрема, я хочу знати, чи є якийсь тип стандартної або прийнятої найкращої практики, яка керує цим стилем кодування.


5
Якщо ви коли-небудь потрапляєте Ruby, насправді існує різниця між одинарними та подвійними котируваннями. Подвійні лапки підтримують інтерполяцію рядків - одинарні лапки розбирають як літерали.
KChaloux

5
Те саме стосується Perl та більшості снарядів.
Blrfl

18
Як це питання "не конструктивне"? Як абсолютний початківець пітон, мені потрібно це знати. Якщо ви пишете bash script, велика різниця.
Magicsowon

19
Не конструктивний? Гез. Перший результат google для "python single double quotes" говорить про те, що потрібно швидко знати. Дякуємо, що попросили Еріка та відповіли прихильно
aggieNick02

Відповіді:


65

Інші відповіді правильні, оскільки це не має ніякої технічної різниці, але я бачив одне неформальне правило стилю для пари проектів з відкритим кодом: подвійні лапки використовуються для рядків, які з часом можуть бути видимі користувачеві (потрібні вони чи ні переклад) та одинарні лапки призначені для рядків, які стосуються функціональності самого коду (наприклад, клавіші dict, регулярні вирази, SQL).

Це, звичайно, не є універсальним правилом (або навіть кодифіковане в ПЕП), тому, як і будь-який інший довільний аспект кодування, він зводиться до місцевих правил.

Зауважте, що PEP 8 (якого я не помічав, коли писав цю відповідь) говорить :

Цей ПЕП не дає рекомендацій щодо цього. Виберіть правило і дотримуйтесь його. Якщо рядок містить символи одинарного або подвійного цитування, використовуйте інший, щоб уникнути зворотних косих рядків у рядку. Це покращує читабельність.

Як зазначає коментатор, це не обов'язково суперечить, залежно від того, як ви інтерпретуєте "правило". Те, що я пропоную, насправді не працює з другою половиною цитати.


1
Це може бути домашній стиль, але це проти PEP 8: виберіть один і використовуйте його для всього файлу, незалежно від вмісту.
Нілс фон Барт

4
@NilsvonBarth PEP каже: "вибирай правило і дотримуйся його", а не "вибирай одного обмежуючого символу та дотримуйся його". "Подвійні лапки для видимого користувачем тексту, одинарні цитати для речей, які використовує машина", здається, ідеально прекрасним правилом, якого слід дотримуватися.
Таннер Світт

1
@Tanner Swett Вибачте, ви праві; це посібник зі стилів Google Python, який вказує "у файлі" google.github.io/styleguide/pyguide.html#310-strings
Нілс фон Барт

Чорний фактично форматує рядки Python, щоб їх оточували подвійні лапки. Навіть jslint хоче, щоб рядки JavaSciprt були оточені подвійними лапками. Більшість старих мов навіть не надавали варіантів. Тільки тому, що ти можеш це зробити, це не означає, що ти повинен. Звичайно, є кілька випадків, коли це дуже приємна річ, наприклад, коли у вас є цитата в рядку. Практично кажучи, більшість ваших рядків має надходити з набору даних, який не є жорстким кодом у вашій кодовій базі.
Бобборт

1
@bobort Навіть якщо ви шукаєте рядки в системі перекладу або інтерфейсу користувача, вам часто все ще потрібні рядкові клавіші для тих, хто у вашому коді. Але я погоджуюсь, що все пішло далі, і від цього розрізнення насправді немає користі.
detly

21

Це дуже просто:

  • Одиночні котирування дозволяють вбудовувати подвійні лапки.
  • Подвійні лапки дозволяють вбудовувати не відхилені одиночні лапки.

Найбільш піфонічно використовувати '(одинарні цитати), поки вам не потрібні подвійні лапки.

Наступна цитата безпосередньо з документації на Stral literals.

доступні в рядках Unicode. Префікс 'b' або 'B' ігнорується в Python 2; це вказує на те, що літерал повинен стати літералом байтів у Python 3 (наприклад, коли код автоматично перетворюється з 2to3). Префікс 'u' або 'b' може супроводжуватися префіксом 'r'.

У рядках з потрійним котируванням недозволені нові рядки та лапки дозволяються (і зберігаються), за винятком того, що три несказані лапки підряд закінчують рядок. ("Цитата" - символ, який використовується для відкриття рядка, тобто "або".)


15
Питання, звичайно, - чому Pythonic віддає перевагу одинарним цитатам, коли майже кожна інша мова використовує подвійні лапки?
Мартін Бекетт

13
@MartinBeckett тому що

3
Ах звичайно ;-)
Мартін Беккет

6
@JarrodRoberson: Я думаю, що "тому, що" (або "тому що", якщо ви хочете) є вірною відповіддю, якщо в якомусь ПЕП (або подібному) написано, що це пітонічний шлях . Інакше це лише особистий вибір.
Йоахім Зауер


17

З технічної точки зору це не має значення, з точки зору стилю - кілька думок:

  • Більшість інших мов програмування використовують подвійні лапки.
  • При написанні англійською мовою зазвичай використовуються подвійні лапки.
  • Одиночні цитати корисні, коли у вашій заявці багато нетехнічного / розповідного тексту, оскільки вони дозволяють використовувати подвійні лапки більш природним способом. bar = '"It\'s awesome" he said.'
  • З іншого боку, символ єдиної цитати також використовується в декількох випадках англійською мовою. bar = "\"It's awesome\" he said."

Зауважте, що "часто використовується також у технічних рядках -e, g f'you submit" {dumb_thing}, але це занадто тупо навіть для нас! "
Крістіан Зауер

4

Немає різниці між використанням одиничних і подвійних лапок у Python. На практиці, залежно від виду даних, з якими ви працюєте, вам може бути зручніший той чи інший стиль.

Тип цитат, що використовуються "за замовчуванням" (де немає переконливих причин використовувати те чи інше), є значною мірою питанням особистої переваги.

Для отримання додаткової інформації дивіться розділ String Literals в документації на Python.


4

Деякі речі, які слід враховувати, коли ви розвиваєте звичку використовувати регулярні або подвійні лапки.

Для подвійних лапок потрібно вводити два пальці; і тому більше шансів на помилки введення тексту, а також зниження швидкості

Ваш редактор може показати один символ краще, ніж інший; для полегшення налагодження візуального синтаксису.

Документи використовують потрійні символи: що виглядає краще? "" "" "або" "" ""

Хоча я ще не бачив цього в ОС Windows, деякі синтаксисні чи документаційні засоби можуть очікувати подвійних віршованих одинарних цитат.

Більшість навчальних посібників Python, які я бачив, я бачу навпаки вашого досвіду. Зазвичай я бачу використані подвійні лапки.


4

На мою думку, я вважаю за краще використовувати подвійні лапки для рядка.

Чому? Для програмістів інших мов можна адаптувати швидко і зрозуміти код легше.

Якщо програміст на C див:

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

Буде вагатися замість:

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

3
"Написання \" Це велике? \ "Ні."
API-Beast

@Lucio Це те, що я робив, я просто не знав, порушую я якийсь встановлений стандарт Python чи ні.
Ерік Гідрік

@EricHydrick Ні, ви можете вибрати те чи інше.
Лусіо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.