Single quotes vs. double quotes in Python [closed]
Asked Answered
O

19

718

According to the documentation, they're pretty much interchangeable. Is there a stylistic reason to use one over the other?

Organicism answered 11/9, 2008 at 8:18 Comment(0)
S
525

I like to use double quotes around strings that are used for interpolation or that are natural language messages, and single quotes for small symbol-like strings, but will break the rules if the strings contain quotes, or if I forget. I use triple double quotes for docstrings and raw string literals for regular expressions even if they aren't needed.

For example:

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
Sacks answered 11/9, 2008 at 10:6 Comment(7)
Interesting, I use them in exactly the same way. I don't remember ever reading anything to nudge me in that direction. I also use triple single quotes for long string not intended for humans, like raw html. Maybe it's something to do with English quote rules.Minatory
Most python coders code it that way. There is no explicit rule, but because we often read the code that way, it becomes an habit.Decode
I wonder if the single quotes for symbol-like things actually comes from the quote expression shortcut in Lisp/Scheme. In any case, it's intuitive. Also, me mateys, if we're following PEP 8 style guidelines, the functions really should be named lights_message() and is_pirate().Hail
@user48814: yeah, I bet it was just that most of the code you read nudged you in that direction subconsciously.Penley
I think Perl made a distinction between single quoted strings (no interpolation) and double quoted strings (with interpolation) and that python coders might have inherited the habit or never let it go.Attorney
This answer may sounds good, but I've found it's annoying in practice to always think which quote to be used. The rule is also ambiguous in some situation. After some weeks using this approach, I now back to using single quote for everything again.Rabinowitz
I use the same convention, plus I abuse it by having vim highlight everything inside triple single quotes as SQL.Lala
S
96

Quoting the official docs at https://docs.python.org/2.0/ref/strings.html:

In plain English: String literals can be enclosed in matching single quotes (') or double quotes (").

So there is no difference. Instead, people will tell you to choose whichever style that matches the context, and to be consistent. And I would agree - adding that it is pointless to try to come up with "conventions" for this sort of thing because you'll only end up confusing any newcomers.

Stratocracy answered 27/9, 2008 at 18:7 Comment(0)
A
90

I used to prefer ', especially for '''docstrings''', as I find """this creates some fluff""". Also, ' can be typed without the Shift key on my Swiss German keyboard.

I have since changed to using triple quotes for """docstrings""", to conform to PEP 257.

Attorney answered 11/9, 2008 at 8:55 Comment(12)
I tend to prefer single quotes, since I write SQL code every day, and single quotes are used for string literals in T-SQL. But I do use triple double quotes, because docstrings can sometimes use a bit of fluff in them.Real
I prefer single quotes everywhere for readability (indeed, double quotes cause more fluff). But as I come from C, I almost automatically type double quotes :)Prescription
@wump, yes. My C# compiler is forever complaining about my character literals...Attorney
Using everywhere simple quotes for strings allows me to disable parts of source code using three double quotes - kind of '#if 0' and '#endif'.Ammons
PyCharm flags single-quoted docstrings by default, any idea why?Compressive
@Eloff, no. I have no idea why. I'd be interested in knowing, though...Attorney
" requires a shift key only on a PC QWERTY keyboard. On my keyboard, " is actually easier to type.Decode
@Ammons makes the best point on this whole, ridiculous discussion, but he's got single and double quotes reversed because of PEP-257 and jblocksom's answer.Cassock
on my keybord " and ' both require the shift key.Multidisciplinary
This answer is contrary to python convention; see PEP 257 which says: For consistency, always use """triple double quotes""" around docstrings. python.org/dev/peps/pep-0257Pollination
@Buttons840, good call. I guess I'll be using quotes instead of apostrophes in the future. Bummer, though. Now my code is sooo fluffy ;)Attorney
Thank you for pointing out that " requires shift, I almost forgot about that. I am sticking with '. I always though " and ' had different functionality in some cases, but since they are the same, I don't see why I would ever use ".Sulfonmethane
J
44

I'm with Will:

  • Double quotes for text
  • Single quotes for anything that behaves like an identifier
  • Double quoted raw string literals for regexps
  • Tripled double quotes for docstrings

I'll stick with that even if it means a lot of escaping.

I get the most value out of single quoted identifiers standing out because of the quotes. The rest of the practices are there just to give those single quoted identifiers some standing room.

Johannejohannes answered 11/9, 2008 at 10:21 Comment(0)
F
26

If the string you have contains one, then you should use the other. For example, "You're able to do this", or 'He said "Hi!"'. Other than that, you should simply be as consistent as you can (within a module, within a package, within a project, within an organisation).

If your code is going to be read by people who work with C/C++ (or if you switch between those languages and Python), then using '' for single-character strings, and "" for longer strings might help ease the transition. (Likewise for following other languages where they are not interchangeable).

The Python code I've seen in the wild tends to favour " over ', but only slightly. The one exception is that """these""" are much more common than '''these''', from what I have seen.

Finnic answered 11/9, 2008 at 8:33 Comment(0)
D
21

Triple quoted comments are an interesting subtopic of this question. PEP 257 specifies triple quotes for doc strings. I did a quick check using Google Code Search and found that triple double quotes in Python are about 10x as popular as triple single quotes -- 1.3M vs 131K occurrences in the code Google indexes. So in the multi line case your code is probably going to be more familiar to people if it uses triple double quotes.

Demolish answered 30/7, 2009 at 20:35 Comment(0)
M
13
"If you're going to use apostrophes, 
       ^

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

For that simple reason, I always use double quotes on the outside. Always

Speaking of fluff, what good is streamlining your string literals with ' if you're going to have to use escape characters to represent apostrophes? Does it offend coders to read novels? I can't imagine how painful high school English class was for you!

Melee answered 22/9, 2011 at 12:35 Comment(2)
'If you are going to "quote" something you will definitely want to use single quotes'Dumond
My opinion has changed on this greatly since I wrote this. It's now just kind of one situation where I would argue that I would use double-quotes. Another would be yours in the context of using single quotes. See the accepted answer for my current stance on the matter in more detail. I think it's a great example of how it should be presented to a broad audience.Melee
W
7

Python uses quotes something like this:

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

Which gives the following output:

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'
Winegar answered 23/1, 2011 at 21:45 Comment(3)
But """This is a string with "quotes"""" raises a SyntaxError. How could this situation be solved? (same as with '''This is a string with 'quotes'''')Maraschino
Insert a linebreak between "quotes" and """Trend
@Maraschino Nicolas' suggestion would change the contents of the string. A better solution is already in the answer: if your string ends with some kind of quote, use the other kind of triple quote. E.g., '''This is a string with "quotes"'''.Jehol
E
3

I use double quotes in general, but not for any specific reason - Probably just out of habit from Java.

I guess you're also more likely to want apostrophes in an inline literal string than you are to want double quotes.

Equestrian answered 11/9, 2008 at 8:40 Comment(0)
R
3

Personally I stick with one or the other. It doesn't matter. And providing your own meaning to either quote is just to confuse other people when you collaborate.

Rive answered 28/9, 2008 at 3:35 Comment(0)
P
2

It's probably a stylistic preference more than anything. I just checked PEP 8 and didn't see any mention of single versus double quotes.

I prefer single quotes because its only one keystroke instead of two. That is, I don't have to mash the shift key to make single quote.

Pali answered 19/9, 2008 at 19:34 Comment(1)
PEP 8 links out to PEP 257 in the first sentence under "Documentation Strings". In PEP 257 it states: For consistency, always use """triple double quotes""" around docstrings. Use r"""raw triple double quotes""" if you use any backslashes in your docstrings. For Unicode docstrings, use u"""Unicode triple-quoted strings""". Still, I like the clean look of single quote and the one keystroke reason you gave.Dolphin
D
2

In Perl you want to use single quotes when you have a string which doesn't need to interpolate variables or escaped characters like \n, \t, \r, etc.

PHP makes the same distinction as Perl: content in single quotes will not be interpreted (not even \n will be converted), as opposed to double quotes which can contain variables to have their value printed out.

Python does not, I'm afraid. Technically seen, there is no $ token (or the like) to separate a name/text from a variable in Python. Both features make Python more readable, less confusing, after all. Single and double quotes can be used interchangeably in Python.

Denationalize answered 5/7, 2010 at 12:51 Comment(2)
To reinforce what you say \n is going to be interpreted only in double quotes in PHP and Perl, while in Python will work both in double and single quotesMonkeypot
@stivlo: Unless you will make a raw string from it, by adding r in front of the string literal. So print 'a\nb' will print you two lines, but print r'a\nb' will print you one.Antoinette
L
1

I chose to use double quotes because they are easier to see.

Larios answered 10/3, 2009 at 6:25 Comment(0)
F
1

I just use whatever strikes my fancy at the time; it's convenient to be able to switch between the two at a whim!

Of course, when quoting quote characetrs, switching between the two might not be so whimsical after all...

Flatworm answered 22/7, 2009 at 19:50 Comment(0)
M
0

Your team's taste or your project's coding guidelines.

If you are in a multilanguage environment, you might wish to encourage the use of the same type of quotes for strings that the other language uses, for instance. Else, I personally like best the look of '

Mccluskey answered 11/9, 2008 at 8:25 Comment(0)
C
0

None as far as I know. Although if you look at some code, " " is commonly used for strings of text (I guess ' is more common inside text than "), and ' ' appears in hashkeys and things like that.

Credendum answered 11/9, 2008 at 8:28 Comment(0)
E
0

I aim to minimize both pixels and surprise. I typically prefer ' in order to minimize pixels, but " instead if the string has an apostrophe, again to minimize pixels. For a docstring, however, I prefer """ over ''' because the latter is non-standard, uncommon, and therefore surprising. If now I have a bunch of strings where I used " per the above logic, but also one that can get away with a ', I may still use " in it to preserve consistency, only to minimize surprise.

Perhaps it helps to think of the pixel minimization philosophy in the following way. Would you rather that English characters looked like A B C or AA BB CC? The latter choice wastes 50% of the non-empty pixels.

Eisen answered 16/4, 2013 at 22:32 Comment(0)
R
-1

I use double quotes because I have been doing so for years in most languages (C++, Java, VB…) except Bash, because I also use double quotes in normal text and because I'm using a (modified) non-English keyboard where both characters require the shift key.

Rota answered 5/7, 2010 at 13:6 Comment(0)
L
-4

' = "

/ = \ = \\

example :

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

Results are the same

=>> no, they're not the same. A single backslash will escape characters. You just happen to luck out in that example because \k and \w aren't valid escapes like \t or \n or \\ or \"

If you want to use single backslashes (and have them interpreted as such), then you need to use a "raw" string. You can do this by putting an 'r' in front of the string

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

As far as paths in Windows are concerned, forward slashes are interpreted the same way. Clearly the string itself is different though. I wouldn't guarantee that they're handled this way on an external device though.

Leavy answered 19/1, 2010 at 4:30 Comment(1)
Holy crap this is old, but I wanted to comment anyway to point out that using forward-slashes may work for windows but is still system-dependent. To ensure you're clear of os dependencies, use os.path.join()Sp

© 2022 - 2024 — McMap. All rights reserved.