What does % do to strings in Python?
It's the string formatting operator. Read up on string formatting in Python.
format % values
Creates a string where format
specifies a format and values
are the values to be filled in.
What does %s mean in a Python format string?
It is a string formatting syntax (which it borrows from C).
Please see "PyFormat":
Python supports formatting values into
strings. Although this can include
very complicated expressions, the most
basic usage is to insert values into a
string with the%s
placeholder.
Here is a really simple example:
#Python 2
name = raw_input("who are you? ")
print "hello %s" % (name,)
#Python 3+
name = input("who are you? ")
print("hello %s" % (name,))
The %s
token allows me to insert (and potentially format) a string. Notice that the %s
token is replaced by whatever I pass to the string after the %
symbol. Notice also that I am using a tuple here as well (when you only have one string using a tuple is optional) to illustrate that multiple strings can be inserted and formatted in one statement.
What does the % inside a string do in Python?
It's a formatting specifier.%d
would mean digit,%s
would mean string, etc etc.
What does the 'b' character do in front of a string literal?
To quote the Python 2.x documentation:
A prefix of 'b' or 'B' is ignored in
Python 2; it indicates that the
literal should become a bytes literal
in Python 3 (e.g. when code is
automatically converted with 2to3). A
'u' or 'b' prefix may be followed by
an 'r' prefix.
The Python 3 documentation states:
Bytes literals are always prefixed with 'b' or 'B'; they produce an instance of the bytes type instead of the str type. They may only contain ASCII characters; bytes with a numeric value of 128 or greater must be expressed with escapes.
python is operator behaviour with string
One important thing about this behavior is that Python caches some, mostly, short strings (usually less than 20 characters but not for every combination of them) so that they become quickly accessible. One important reason for that is that strings are widely used in Python's source code and it's an internal optimization to cache some special sorts of strings. Dictionaries are one of the generally used data structures in Python's source code that are used for preserving the variables, attributes, and namespaces in general, plus for some other purposes, and they all use strings as the object names. This is to say that every time you try to access an object attribute or have access to a variable (local or global) there's a dictionary lookup firing up internally.
Now, the reason that you got such bizarre behavior is that Python (CPython implementation) treats differently with strings in terms of interning. In Python's source code, there is a intern_string_constants function that gives strings the validation to be interned which you can check for more details. Or check this comprehensive article http://guilload.com/python-string-interning/.
It's also noteworthy that Python has an intern()
function in the sys
module that you can use to intern strings manually.
In [52]: b = sys.intern('a,,')
In [53]: c = sys.intern('a,,')
In [54]: b is c
Out[54]: True
You can use this function either when you want to fasten the dictionary lookups or when you're ought to use a particular string object frequently in your code.
Another point that you should not confuse with string interning is that when you do a == b
, you're creating two references to the same object which is obvious for those keywords to have the same id
.
Regarding punctuations, it seems that if they are one character they get interned if their length is more than one. If the length is more than one they won't get cached. As mentioned in the comments, one reason for that might be because it's less likely for keywords and dictionary keys to have punctuations in them.
In [28]: a = ','
In [29]: ',' is a
Out[29]: True
In [30]: a = 'abc,'
In [31]: 'abc,' is a
Out[31]: False
In [34]: a = ',,'
In [35]: ',,' is a
Out[35]: False
# Or
In [36]: a = '^'
In [37]: '^' is a
Out[37]: True
In [38]: a = '^%'
In [39]: '^%' is a
Out[39]: False
But still, these are just some speculations that you cannot rely on in your code.
Does Python have a string 'contains' substring method?
Use the in
operator:
if "blah" not in somestring:
continue
What does the percentage sign mean in Python
Modulus operator; gives the remainder of the left value divided by the right value. Like:
3 % 1
would equal zero (since 3 divides evenly by 1)
3 % 2
would equal 1 (since dividing 3 by 2 results in a remainder of 1).
Related Topics
Calling the "Source" Command from Subprocess.Popen
Google Fonts (Ttf) Being Ignored in Qtwebengine When Using @Font Face
R Foverlaps Equivalent in Python
Differencebetween Ruby and Python Versions Of"Self"
How to Release Memory Used by a Pandas Dataframe
Python 3.7 Anaconda Environment - Import _Ssl Dll Load Fail Error
Installation Issue with Matplotlib Python
How to Make the Python Interpreter Correctly Handle Non-Ascii Characters in String Operations
In Python, How to Import Filename Starts with a Number
How to Rotate the Sprite and Shoot the Bullets Towards the Mouse Position
How to Pull Out CSS Attributes from Inline Styles with Beautifulsoup
Combine a Folder of Text Files into a CSV with Each Content in a Cell
Python's Equivalent for Ruby's Define_Method
Extract Column Value Based on Another Column Pandas Dataframe
Applying Udfs on Groupeddata in Pyspark (With Functioning Python Example)
Does Python Optimize Modules When They Are Imported Multiple Times