Some more notes
bearophileHUGS at lycos.com
Tue Oct 26 03:43:49 CEST 2004
Thank you Josiah Carlson for all your comments.
>so argument over it is a moot point.
>Please stop advocating the removal of useful features.
>Stop complaining about them.
Well, I haven't done something bad, so I think I still have the rights
to discuss, suggest and ask things here.
>In my opinion, the syntax-less case statement described in the PEP is
>pure. That is, no new syntax is needed, but if your if/elif/else
>statements are of a certain format, you gain the speed of dictionary
>dispatch. I believe that any case-statement-like behavior in Python
>will likely be of this sort.
I'm still too much ignorant of Python to understand this :-)
>I could have sworn that either append or prepend was fast
On Mathematica (4.0 ore less) both append and prepends are O(n) and
quite slow, if you want to do a much faster "append" to Mathematica
lists, you have to create a nested list:
[a, [b, [c, [d]]]]
And then Flatten it. This can be hundred times faster for 10000
A group of functions to do it re-defining the heads of the structure:
createL = h123456;
apppendL[l_, x_] := h123456[l, x];
prepL[l_, x_] := h123456[x, l];
convertL[l_] := Flatten[l] /.
h123456 -> List;
>The only problem is education. Once one becomes educated about the
side-effects of append/extend/etc., one rarely has problems of this
Okay. I'll take my time to learn more and I'll see if you are right.
>Honestly, I (and likely many others) don't care that Mathematica can
be faster. C can be faster, Java can be faster, Perl can be faster.
We use Python for varying reasons and for varying purposes.<
I didn't meant to offend Python... I appreciate many languages at the
same time :-)
(Comparing the speed of C with python is probably of little use, but
comparisons between Mathematica and Python can be a bit more
interesting, because they are both interpreted, etc. And maybe
Mathematica can suggest things to improve Python.)
>For general programming, there are other better languages (in my
opinion, which I imagine is shared), nearly all of which are free.<
> If you mean things like (I can't remember the exact syntax, perhaps this is it)...
> fib[a_] := If[a<3, Return, b=fib[a-1]+fib[a-2];fib[a]=b;Return[b]]
Something like this is probably nicer and/or more correct:
fib = 1;
fib = 1;
fib[x_] := fib[x] = fib[x - 1] + fib[x - 2]
Mathematica's global hash can contain the triads: (functions, params,
>With a 'memoization decorator', it gets easier in the general case<
>If you are talking about something else, perhaps you should describe
I was talking about something different. I have found a page about it:
But this page is still quite basic: with the automatic rewriting rules
and pattern matching you can do lot of things.
>Funny, I found no mention of division operator breaking on the Python
I'm sorry, I'm ignorant and I'm just confused about all this. I've
read the PEP238:
>True division becomes default behavior
>> Case <name>:
>> 1: DoSomething1
>> range(2,23): DoSomething2
>> else: DoSomething3
>>That is the worst syntax for case statements I have ever seen.<
It's just an idea, and it's similar to Delphi sintax... The PEP275
suggests something like:
>Another proposed extension would allow ranges of values (e.g. case
I've just used the Python range(a,b) to express the half-open
interval... But probably the Pascal a..b syntax is better.
>Understand that 'obj.attr = val' implies that obj is mutable. Do you
>also want to remove object oriented programming in Python? Likely
>but understand the implications for what you say.
A bear hug and thank you again,
More information about the Python-list