7. Evaluation so far
I now have implemented exactly the same functionality in Python as
I had available in the TCL/Tk script. It is now time for a short
evaluation.
7.1. Speed
The Python script is noticably slower than the TCL/Tk
equivalent, epecially at start-up.
Something needs to be done about that otherwise Python scripts
become unusable.
The speed differnce is mostly in three places:
-
start-up
-
looping over the mysql-cursor
-
adding items to listboxes
The way I found this is by putting time print out
in specific functions:
from datetime import datetime def printnow(string): dt = datetime.now() print string, dt.second, dt.microseconds
and calling this
printnow
at specific places in the code.
You can ofcourse add
dt.minutes
but if the execution would require me to add the minutes,
I would abandon any further exploration of Python.
The result for the looping over the cursor ('cursor.executed' to
'copied to the list') are 1.3 seconds, as can be seen below:
get_selection 45 470185 cursor.executed 46 249354 copied to the list 47 554510 showlist start 47 554571 list cleared 47 633019 list filled 48 351590
The complete update of the listbox from the database is 2.8 seconds, which is
clearly much more than the almost instantanous response from TCL/Tk.
7.2. Code size
Python's code size in lines is significantly larger than TCL/Tk.
Python is a language that likes to do everything vertically. With
a maximum linesize of 80 characters, the codesize in lines quickly
becomes very large. The python version is 549 lines, and the TCL/Tk
is 337. In characters, Python is more than 75% larger.
7.3. Readability
Code from Python is marginally better readable. My screen is (vertically)
around 80 lines, which makes it impossible to get a good overview of sections
in the Python code in one screen. The punch-card restriction of 80 columns,
compared with the 180 columns of the terminal screen, makes it feel like
Python has made some odd choices.
7.4. Variable typing
One thing that is bewildering is the strong typing of Python
in combination with its dynamic typing.
In Perl, you can:
$a=2; $b="1+1=".$a; print $b;
to get "1+1=2".
In Python, this results in:
>>> a=2 >>> b='1+1=' + a Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects
Note that you can assign
a='2'
even after it once was an integer.
That is called dynamic typing.
The combination of dynamic typing and strong typing gives
additional constructions like:
b='1+1={0}'.format((a))
which require quite a bit of Python specific reasoning to justify.
7.5. Libraries
Python has a lot of libraries that do different things, and many that do
the same thing. There is no way to tell if these libraries will be continued,
if they are part of standards or anything like that.
Further more, all sorts of installation methods are used, from
slapt-get
to
easyinstall
and
pip install
and let's not forget compiling from source.
The libraries are also all over the place; a standardization
in location seems difficult. Add to this the version 2 and version 3
problems and the frameworks, and you'll get
XKCD's installation
of Python.