6 ms·
you don't need hashbang if you run it the same like python: sh script.sh python script.py So one line vs two lines import sys open(sys.argv[1],'w').w
by rofrol 13y ago
you don't need hashbang if you run it the same like python:
sh script.sh
python script.py
So one line vs two lines
import sys
open(sys.argv[1],'w').writelines(sorted(open(sys.argv[2]).readlines()))
Yep, bash is more readable for small scripts
- 6ren 13y agofaster too $ time sort < t > t-sh real 0m0.016s user 0m0.008s sys 0m0.008s $ time py -c "import sys; open(sys.argv[1],'w').writelines(sorted(open(sys.argv[2]).readlines()))" t-py t real 0m0.088s user 0m0.056s sys 0m0.012s BTW also a different result (I curled this page for the data).
- tyrion 13y agoIt is faster mainly because of the startup time of the python interpreter. You can improve performances using the "-S" on the python interpreter. I get inconsistent results with time, I think maybe because of context switching as stated here [1]. See my results here: http://pastebin.com/HMUErzee http://pastebin.com/HMUErzee 1: http://stackoverflow.com/questions/9006596/is-the-unix-time-command-accurate-enough-for-benchmarks http://stackoverflow.com/questions/9006596/is-the-unix-time-...
- rofrol 13y agoMy results http://pastebin.com/C1crTA1S http://pastebin.com/C1crTA1S Code from https://github.com/rofrol/go-examples https://github.com/rofrol/go-examples
- tyrion 13y ago> Yep, bash is more readable for small scripts I don't agree with that, in my opinion bash is more coincise while python is far more explicit and thus more understandable. Python is not meant to be written in one line; the script could be rewritten in a readable way like this: import sys inp = open(sys.argv[1], 'r') out = open(sys.argv[2], 'w') out.writelines(sorted(inp))
- brian_cloutier 13y agoThis is my favorite python implementation in this thread. I daresay it's beautiful. Including whitespace it's still half as long as the "11 line" core of the C++ script. There's an unnecessary 'r'. Combined with the line rhythm established by opening the files in consecutive lines you ensure readers who would have been confused by the 'w' will quickly understand. And the last line reads like programmer English; by which I mean English with a SVO word order. Not intuitive to the average person but quite parsable by anybody who's used a modern imperative language. I can't even nitpick your choice of inp instead of input, the rhythm you setup and the contrast with 'out' means it's quite obvious what you mean. Have an upvote.
- ksrm 13y agoEnglish is usually SVO; I assume you meant OVS?
- deleted 13y ago[deleted]
- hcarvalhoalves 13y agoObligatory functional style: import sys reduce(lambda i, o: o.writelines(sorted(i)), map(lambda args: open(*args), zip(sys.argv[1:], ('r', 'w')))) If Guido didn't despised FP so much maybe we could get a nicer lambda syntax... but here's anyway.
- tyrion 13y agoIn my opinion using reduce, map and zip is not a good idea in this case. What are they needed for? I don't even think your approach is more functional than the examples above. I mean, this one line should be equally functional and .. it's shorter and even more understandable: open(sys.argv[2], 'w').writelines(sorted(open(sys.argv[1])) (Btw you're talking about a nicer lambda syntax but imho your example looks ugly because of all the unneeded stuff you've put into it)