Python is wierd!

Alex Martelli alex at magenta.com
Tue Jul 25 06:56:47 EDT 2000


"Jonathan" <theebh at yahoo.com> wrote in message
news:8lj7kr$ttc$1 at nnrp1.deja.com...
> Hi, just finished going through the 'Learning Python' book, and the
> feeling that i get is that Python is really wierd(compared to other
> conventional languages like C++, Java, etc). For e.g.(correct me if i'm

Funny.  With my background being 20+ years of (Fortran, Pascal,
APL, C, C++, Java, Perl, &c), I picked up Python a few months ago
and found myself *immediately* productive with it.  No weirdness
that I could perceive...


> 1. There are no keywords to declare static or instance variables; it
> all depends where they are placed(whether it's right after the <class>
> statement, or inside a <def>). Isn't it harder for other programmers to
> know at one glance what type of attributes the class define?

I see a "self.something=23", I know "self" is an instance variable; no
muss, no fuss.  MUCH clearer than the implicit-this convention of
C++ and Java.  Explicit self -> less weirdness, not more.


> 2. No *formal* declaration of static class methods, e.g. no 'static'
> keyword (though i'm not sure how useful static methods are in OOP
> design). I read somewhere in this newsgroup that the workaround way is
> to define the method outside of the class - doesn't it break
> the 'encapsulation' a class suppose to have?

Encapsulation in Python is a matter of convention (as it actually
ends up being in all languages, but most strive hard to make it
appear they enforce it:-).  Static methods are not particularly
useful when you can have free-standing functions in their stead,
and grouping by-module is more productive than by-class (the
class is not the natural unit of encapsulation, an issue that is also
acknowledged by the package concept of Java and the friend
keyword in C++).


> 3. No keywords to differentiate between passing arguments by reference
> or value! An integer is passed by value(reference to a new copy), while
> a mutable object is by reference. To pass a list by 'value', i know you
> just need to insert one more line(list = [:]), but it seems
> so 'inconsistent' compared to Java or even PHP.

*Blink* what IS the difference supposed to be, in the above paragraph,
between the situation in Java and in Python, again?  You pass an int,
it's by-value (notionally, reference-to-immutable-value); you pass an
object reference, it's by value *of the reference*, i.e., by reference *on
the object*.   What "keywords to differentiate between passing
arguments by reference or value" is Java supposed to have acquired
since I studied and used it...?

The ByVal/ByRef keywords are in Visual Basic, and I don't really miss
them at all in Python just as I didn't use to miss them in Java.


> (Not to mention the number of 'gotchas' listed in the book that are
> bound to trap beginners - *shudder*)

Such as...?  I breezed through "Learning Python" several months
ago, and I don't recall such "gotchas".  Any gotcha-risk I can imagine
Python having, would have to be towards programmers experienced
in a very modest variety of other languages; beginners, using Python
as their first language, and old-hands like me, having already survived
the wide variety of semantics and syntax of a dozen other languages,
should be reasonably immune.

The three-scopes-and-no-more rule, where each name can only be
local, global, or built-in (no other possibilities, no nesting of scopes),
for example, is extremely simple; somebody used to nested-scopes
exclusively will find it unfamiliar at first, I guess -- is this sort of
thing
the one you consider a "gotcha"?


> The reason i'm picking up python is that i got sick of PERL:), and

That was my key motivation at first, too.  I've now moved to Python
basically everything that I used to do in Perl -- and I've been quite
surprised that Python becomes my language of choice for many
other things that I'd never have considered Perl for.

> don't really like the inflexible typing of Java. Furthermore, some ppl
> claim that Python is easier to learn, enables you to write much cleaner

With my limited experience, I'd underwrite this.

> codes... However, after reading the python book, my head is still
> spinning, trying to catch all the 'intricacies' of this language. No

But there aren't any.  That's why it's so powerful!-)

> doubt it will be a powerful and useful 'tool' to me once i get used to
> it; but i don't think it's suitable to be a first programming language
> for non-programmers(i read somewhere about this project going on).

CP4E, I guess.  I believe it's probably the best for most people.

> Pascal(for procedural) and Java(for OOP) is still the better choice to
> start off, IMHO.

There are two main schools about the kind of features a beginners'
language should provide.  The bondage-and-discipline school holds
that such a language should strictly confine the beginner to "what is
good for him/her", *forcing* him/her to do things "the one true way".
The flowers'-children school holds that a tool's role is to get OUT of
the way, being as simple and obvious as feasible, to let the learner
concentrate efforts on the REAL difficulties of learning to think like
a programmer.  Of course, there are sub-schools of each, which
depend on secondary considerations such as syntax.  But the main
split, as I see it, is between these two key world-views.

If you subscribe to B&D, of course Python would not be appropriate,
since it *avoids* binding the user's hands in such wise.  It does try
to offer "one clearly correct way to do things", but never goes out of
its way to _constrain_ users to that one way.  Pascal, Sather, Java,
Oberon, would be outstanding candidates for a first language on the
B&D lines.

Python, together with Smalltalk, Scheme, or Rexx, is an outstanding
candidate for the _second_ way to look at the world.  Of these, Python
would be my favourite were I to pick such a language today.

(Other languages such as Perl, C++, Ada, Common Lisp, and so
on, I view for different reasons as too complex and obtrusive to be
good first-programming-languages, and similarly for lower-level
languages such as C, machine language of any ilk, or Forth).


Alex






More information about the Python-list mailing list