New to Python: Features

Dan Bishop danb_83 at yahoo.com
Tue Oct 5 10:43:18 CEST 2004


Richard Blackwood <richardblackwood at cloudthunder.com> wrote in message news:<mailman.4286.1096945096.5135.python-list at 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.



More information about the Python-list mailing list