Re: New to Python: Features

From: Dan Bishop (danb_83_at_yahoo.com)
Date: 10/05/04


Date: 5 Oct 2004 01:43:18 -0700

Richard Blackwood <richardblackwood@cloudthunder.com> wrote in message news:<mailman.4286.1096945096.5135.python-list@python.org>...
> Hi, I'm new to Python and I'd like to know if Python has the following
> support: *please answer to each individually, thanks*

Most of your questions are answered at http://docs.python.org/
 
> 1. Multi line comments

No. But multi-line docstrings are supported.

> 2. Functions as variables:
> a. functions can be stored in variables, passed as arguments to
> other functions, and returned as results.

Yes.

>>> def deriv(f, x, delta=1e-8):
... "Centered difference approximation of f'(x)"
... return (f(x + delta) - f(x - delta)) / (2 * delta)
...
>>> deriv(lambda x: x * x, 2)
3.9999999756901161

> 3. Function nesting with proper lexical scope (i.e. closures)

Yes.

> 4. Operator overloading (inc. the ability to define new operators)

Yes. This is done by defining the special methods __add__, __mul__,
etc.

> 5. Can I do this? print("Hello " .. "World") --> Hello World

If ".." is supposed to be the string concatenation operator, then yes.

>>> print "Hello " + "World!"
Hello World!

> 6. Constructors

Yes. They're defined like this:

   class MyClass:
      def __init__(self, arg1, arg2):
         # ...

and called like this:

   x = MyClass(arg1, arg2)

> 8. "Repeat-Until" as in :
> repeat
> line = os.read()
> until line ~= ""
> print(line)

There isn't a special syntax for posttest loops. You have to write
them like

   while True:
      line = os.read()
      if not line:
         break
   print line
  
> 10. Can I call an object's method as object:method(arg) and have that
> translate into object.method(object, arg)

>>> class MyClass:
... def foo(self, arg):
... pass
...
>>> m = MyClass()
>>> m.foo(0)
>>> MyClass.foo(m, 0)

> 11. Can I make dynamic statements and nature like with eval() in Javascript?

Yes.

>>> x = 1; y = 2
>>> z = eval("x + y")
>>> exec "print z"
3

> 12. Can I make calls to a function with a varying number of arguments?

Yes.

>>> def func(fixedArgA, fixedArgB, *args):
... print "called with", 2 + len(args), "arguments"
...
>>> func(1, 2, 3, 4)
called with 4 arguments
>>> func(1, 2, 3, 4, 5, 6)
called with 6 arguments

> 13. Named arguments

Yes.

>>> datetime.date(month=10, day=5, year=2004)
datetime.date(2004, 10, 5)

> 14. Tables with built-in methods for manipulation such as sort, etc.

Try the built-in "list" type. Also, "dict".

> 15. Table filters

I'm not quite sure what you're asking. Do you mean something like

>>> [n for n in xrange(2, 20) if isprime(n)]
[2, 3, 5, 7, 11, 13, 17, 19]

?

> 15. Proper Tail Call (otherwise known as Proper Tail Recursion)

No.

> 16. The ability to call a function without brackets

Fortunately, no.

> 17. Is the Python interpreter a JIT? Does it have a bytecode? Is it as
> fast as Java?

For the standard interpreter: No. Yes. No.

But try Psyco (psyco.sourceforge.net).

> 21. May modules be stored in variables, passed to and produced from
> functions, and so forth?

Yes.

>>> import sys
>>> import os
>>> modules = [sys, os]
>>> modules[1].getcwd()
'/home/dan'

> 22. Is the self parameter hidden from me as a programmer? Can I
> hide/unhide it as I wish?

No.

> 25. A fully implemented .NET counterpart (I should be able to write
> Python scripts for both with the same code)

It's not fully implemented yet, but there is a .NET version
(http://www.ironpython.org).

> 33. Function/Method overloading

No, but it can often be simulated by default parameters, or by
"isinstance" checks.

> 34. In pure Python, can I change and add new constructs to the Python
> syntax?

No.

> 43. Embedding variables in strings like: print "Hello, World. Time:
> #{Time.now}"

No, but this can be written almost as easily using the % operator.

>>> print "Hello, World. Time: %s" % datetime.datetime.now()
Hello, World. Time: 2004-10-05 03:12:14.750796

or

>>> now = datetime.datetime.now()
>>> print "Hello, World. Time: %(now)s" % locals()
Hello, World. Time: 2004-10-05 03:14:01.111879

> 44. Case or Switch statements with functionality as such:
> case score
> when 0...40
> puts "Horrible!"
> when 40...60
> puts "Poor"
> when 60...80
> puts "You can do better!"
> when 80...95
> puts "Now that's acceptable"
> when 95..100
> puts "That the best you can do? j/k"
> else
> puts "Didn't take the test?"
> end

Python does not have a switch/case construct. Your example would
normally be written as an if...elif...else ladder.



Relevant Pages

  • Re: - E04 - Leadership! Google, Guido van Rossum, PSF
    ... not every Python object can be the target of a weak reference, ... puts Talker.meta ... print "fn1", self, arg ...
    (comp.lang.python)
  • Re: class declaration shortcut
    ... easy it is to declare a class compared to equivalent code in c#. ... I wonder if there is any way to emulate this in Python. ... The ruby code is not an easy way to declare a class, ... for arg in args: ...
    (comp.lang.python)
  • Re: why no arg, abs methods for comlex type?
    ... > In my opinion it would also be nice to have the ... Python is object based but not rigidly OO in syntax or looks. ... > unfortunately there is no arg method to get the angle ...
    (comp.lang.python)
  • Re: Ruby needs continuations...
    ... One thing that Ruby should take from Python are continuations. ... programming in it, aren't I?), its syntax choices irk me to no end. ... Arg! ...
    (comp.lang.ruby)
  • Re: problem using C-bindings
    ... In that case I would see how xxmodule.c exports methods in the xx_methods ... array and then in your python code have the class method call that exported ... return xxmodule.xxfunc(self.someval, arg) ...
    (comp.lang.python)