Ask HN: Why do I have to type print "x: "+str(x) in Python?
I imagine there is a not-bad reason, as Guido is pretty damn smart, but it's beyond me.
I imagine there is a not-bad reason, as Guido is pretty damn smart, but it's beyond me.
>>> x = 1234
>>> print "x:", x
x: 1234 >>> print "x: "+x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
To my mind, "x: "+x is ugly. Perl style "x: $x" makes more sense. But I don't speak python, so my opinion is meaningless.Python 2.6 introduces string interpolation like Ruby/Perl. (Older versions used printf-style format strings.)
print "x: {x}".format(x=1234) # New in 2.6
print "x: %d" % x # Old
http://docs.python.org/tutorial/inputoutput.html#fancier-out... >>> "X: %(x)s" % {"x":10}
'X: 10'In perl, "$x" pulls the value of $x from the variable namespace. In your Py2.6 example, the "{x}" format in the string has nothing to do with a variable named x; rather it references the keyword args supplied to format.
To simulate perl's
print "x: $x";
you would print "x: {x}".format(x=x)>>> x = 3 + "7"
What type should be x now: int or str ?
Also: "10" is lesser than "2" but 10 is greater 2.
Should (3 + "7") > 2 return true ?
Such automatic conversions forces you to remember many arbitrary rules, and when you forget it, you have bug that shows later.
It's easier to just write that str() (or use operator %).
For that code to work str.__add__(self,x) should accept int as parameter x.
If that was the case, then "3" + 7 would return "37" (ok, I've thought it will be "10", my bad :)), but 7 + "3" would still cast exception. So + would be not symmetric.
For example, should "3" == 3? Should 3 automatically be converted to "3" in that instance, or vice-versa?
Anyway, a better solution is: print "x: %s" % x
Explicit is better than implicit.