Re:Recharging the Python standard library
by viraptor on Friday October 11, 2013 @11:43AM
(#6533828)
Yeah, not the best example I think. This code is not bad at all:
filepath = os.path.join('.', 'test_dirs)
os.makedirs(filepath)
with open(os.path.join(filepath, 'test.txt'), 'w') as f:
f.write('hello world')
And it's actually obvious what happens with the file handle after write. I'm not sure if it's still open or not at the end of his example really. I wouldn't be surprised by his example in ruby code (overloading with magic functionality), but in python that just looks weird...It does make the code a lot clearer to read. There are a lot of other python packages that overload specific operators/magic functions to aid readability. For example, numpy arrays overload the slice operator to great effect.
Also, on the same topic, what about using the '+' operator with strings and lists/tuples for concatenation? Or the '|', '&' and '^' operator for sets (which I have to admit I never use because I can never remember which is which)?
Re:Recharging the Python standard library
by falcolas on Friday October 11, 2013 @12:36PM
(#6534182)
> It does make the code a lot clearer to read.
If, and only if, you're familiar with how the path library works. I had to shift mental contexts away from python and into shell to understand that it was a "shortcut" for os.path.join(). The division operator is not typically associated with path joining in programming languages.
Frankly, it's not really offering any greater level of abstraction for paths; just shortcuts. You still have to call makedirs, open, write, etc. I don't find the minute improvements to os.path.join that terribly compelling.
Re:Recharging the Python standard library
by mattdeboard on Friday October 11, 2013 @02:46PM
(#6535071)
I agree. I inherited some code that did this and it was not immediately obvious what was going on. I thought the variables being used where numbers, and I was very confused.
Re:Recharging the Python standard library
by revelation on Friday October 11, 2013 @11:44AM
(#6533838)
I guess its a terrible thing for a dynamic language like Python. boost::filesystem::path has been overloading the '/' operator all along.
Not to mention the fact that, in his code, he aliased path to p, so it's even more confusing as to what is going on there.