Can global variable be passed into Python function?
steve+comp.lang.python at pearwood.info
Sat Mar 1 01:44:33 CET 2014
On Sat, 01 Mar 2014 02:03:51 +0200, Marko Rauhamaa wrote:
> Steven D'Aprano <steve+comp.lang.python at pearwood.info>:
>> You can't have it both ways: you cannot claim that switch or case is
>> more readable than a chain of if...elif, and then propose a syntax
>> which is effectively a chain of if...elif while still claiming it is an
>> improvement. It's not. All you've done is introduce an element of
>> implicit magic to the syntax.
> You may be right that Python has too many practical problems for a truly
> fitting switch syntax.
I didn't make that claim. My claim is that your suggested syntax is no
real improvement over existing syntax.
>> Why (how?) would you want to use *multiple* classes for a single
> Well, I was just given a whole link on the very topic:
> <URL: http://c2.com/cgi/wiki?SwitchStatementsSmell>
No no no, you've deleted the context. I'm not talking about making a
switch statement unnecessary by using polymorphism. I was responding to
your claim that instead of using a dict, one should:
At least have the decency of creating inner classes.
I don't understand this. That's why I asked why and how. I can only
imagine you mean something like this:
but I don't see how you get from that to the functionality of a dispatch
table, or what you're supposed to do with the nested classes.
> Here's a shorter one:
> <URL: http://en.wikipedia.org/wiki/State_pattern>
That's not a way of implementing switching. That's a way of *avoiding*
switching. Despite the name, it has little to do with state machines.
> Anyway, while implementing states as singleton inner class instances is
> elegant and highly readable,
That's terribly, terribly inelegant. Why not use the class objects
themselves, instead of instantiating them? Even then, you haven't escaped
the use of a dict dispatch table, or a chain of if...elif. You've just
defined the symbols you use.
> the technique suffers in one significant
> respect: it can be very slow.
Particularly if you program Java in Python.
> Often a state machine has numerous states
> but the typical execution path only visits a few of them. However, the
> pattern calls for declaring classes (or instances) for all states in the
> state machine constructor. Switch statements make it possible to avoid
> this creation overhead.
How do you avoid creating the classes or instances? If they haven't been
created, how can the compiler reference them?
>> Dict dispatch tables are elegant, attractive and efficient if you are
>> using pre-existing functions or functions you can create using lambda:
> I beg to differ. The dict dispatch tables are very hard to read. The
> fully blown-out if-else chain beats it in elegance hands down.
Only if you lay out the dict badly. Poorly written code is ugly and hard
to read no matter what you do.
More information about the Python-list