Home »
Python
What exactly do 'u' and 'r' string flags do, and what are raw string literals in Python?
By IncludeHelp Last updated : December 08, 2024
Prefix of 'u' with a string
The prefix of 'u' in a string denotes the value of type Unicode rather than string (str). However, the Unicode strings are no longer used in Python3. The prefix of 'u' in a string denotes the value of type Unicode rather than str. However, the Unicode strings are no longer used in Python3.
In Python2, if we type a string literal without 'u' in front, we get the old str type which stores 8-bit characters, and with 'u' in front we get the newer Unicode type that can store any Unicode character.
Prefix of 'r' with a string
Additionally adding 'r' doesn't change the type of the literal, just changes how the string literal is interpreted. Without the 'r' backlashes (/) are treated as escape characters. With 'r' (/) are treated as literal.
Raw strings
Prefixing the string with 'r' makes the string literal a 'raw string'. Python raw string treats backslash (\) as a literal character, which makes it useful when we want to have a string that contains backslash and don’t want it to be treated as an escape character.
Example 1
Consider the below example, where (\) has a special meaning.
s='Hi\nHello'
print(s)
r=r'Hi\nHello'
print(r)
Output
The output of the above example is:
Hi
Hello
Hi\nHello
Example 2
Consider the below example, where (\) doesn't have special meaning,
s='Hi\xHello'
Output
The output of the above example is:
File "main.py", line 1
s='Hi\xHello'
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \xXX escape
Example 3
s=r'Hi\xHello'
print(s)
Output
The output of the above example is:
Hi\xHello