Confessions of a Python fanboy

Iain King iainking at gmail.com
Fri Jul 31 05:54:50 EDT 2009


On Jul 31, 8:28 am, Steven D'Aprano <st... at REMOVE-THIS-
cybersource.com.au> wrote:
> On Thu, 30 Jul 2009 18:06:31 -0500, Robert Kern wrote:
> > On 2009-07-30 16:44, r wrote:
> >> On Jul 30, 4:29 pm, Emmanuel Surleau<emmanuel.surl... at gmail.com> wrote:
> >>>> 1.) No need to use "()" to call a function with no arguments. Python
> >>>> -->  "obj.m2().m3()" --ugly
> >>>>    Ruby -->  "obj.m1.m2.m3"  -- sweeet!
> >>>> Man, i must admit i really like this, and your code will look so much
> >>>> cleaner.
> >>> It has benefits - code does look better. It has also significant cons
> >>> - it is ambiguous.
> >>> For instance:
>
> >>> a = b
>
> >>> Is b a variable or a method called without parameter?
>
> >> Hello Emanuel,
> >> Again, who so ever names a method with such a non-descriptive name will
> >> get whats coming to him. And if you did for some reason use such a
> >> cryptic name as "b", do yourself (and everyone else) a favor and follow
> >> it with "()" to denote the method call. Remember when something is
> >> optional that means you have an option to use it OR not use it.
>
> > I believe his point is that it is ambiguous to the compiler, not humans
> > reading the code. Python functions and methods are first class objects.
> > They can be passed around. If they were auto-called, then you could not
> > do this.
>
> Oh my, "r" is still around is he??? And now he's singing the praises of
> Ruby, the language which he treated as the Devil's Spawn when he first
> arrived. That's hilarious.
>
> But back on topic... "r" has missed the point. It's not that a=b is hard
> to understand because b is a poor name. The example could have been:
>
> def factory_function():
>     magic = time.time()  # or whatever
>     def inner():
>         return magic
>     return inner
>
> my_function = factory_function
>
> It's still ambiguous. Does the programmer intend my_function to become
> factory_function itself, or the output of factory_function?

Not only that - does 'return inner' return the function inner or the
result of function inner?

How does ruby pass a function as an object?

Iain



More information about the Python-list mailing list