The following code does not print what I would expect:
#!/usr/bin/env python
print type(1,)
a = 1,
print type(a)
Here is the output:
<type 'int'>
<type 'tuple'>
I understand that the comma makes a into a tuple. But if that is the case how come the original print is not printing a tuple type but an int?
Because the tuple syntax inside a function call is also the way parameters are passed:
>>> print type(1,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: type() takes 1 or 3 arguments
>>> print type((1,))
<type 'tuple'>
>>> a = 1,
>>> type(a)
<type 'tuple'>
It is a syntax ambiguity for python, which it solves by deciding that you are trying to pass a parameter (if you ask me, it should be a syntax error though).
>>> print type(1,)
>>> print type(1)
Are the same.
type()
is a function, so the python parser will pass everything between the parenthesis of the type
function call as the argument tuple to that function.
Thus, to pass a literal tuple to a function call you'll always need to add the parenthesis to the tuple for the parser to recognize it as such:
print type((1,))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With