syntax philosophy
Dave Benjamin
ramen at lackingtalent.com
Tue Nov 18 16:49:26 EST 2003
In article <hvjub.4572$sb4.1007 at newsread2.news.pas.earthlink.net>, Andrew Dalke wrote:
> Similarly, dictionaries require that entries be created before they
> can be used. This is because it's impossible for Python to
> know which value you want for the default. Python is strongly
> typed, so "2"+1 will raise an exception, unlike Perl where it
> yields the number 3. If Python used a 0 for the default then
> what if you really wanted to concatenate strings? If it used
> "" then what if you wanted to add numbers? Whatever choice
> you make, it will be wrong for most cases.
I agree with everything else you said here, but want to caution against your
claim that it's "impossible for Python to know" what to supply as a default.
For instance--and I'm not saying this is better or worse, nor that it is in
harmony with the Python Way--Ruby works like this instead:
irb(main):001:0> d = {}
=> {}
irb(main):002:0> d['a']
=> nil
irb(main):003:0> d.default = 0
=> 0
irb(main):004:0> d['a']
=> 0
irb(main):005:0> d.fetch('a')
IndexError: key not found
from (irb):5:in fetch'
from (irb):5
So, as you can see, the default behavior in Ruby is akin to Python's
dict.get (which allows you to supply a default), and the exception-throwing
method is "fetch", instead of [].
In summary:
Python Ruby
------------- ----------------------
d['a'] d.fetch('a')
d.get('a') d['a']
d.get('a', 0) d.default = 0; d['a']
I prefer the Python way because the lazier syntax ([]) is fail-fast.
--
.:[ dave benjamin (ramenboy) -:- www.ramenfest.com -:- www.3dex.com ]:.
: d r i n k i n g l i f e o u t o f t h e c o n t a i n e r :
More information about the Python-list
mailing list