New to Python: Features
Josiah Carlson
jcarlson at uci.edu
Tue Oct 5 00:05:08 EDT 2004
Had you read the tutorial, you would discover the answers to all of
these questions, but I'll answer them anyways.
> 1. Multi line comments
No.
> 2. Functions as variables:
> a. functions can be stored in variables, passed as arguments to
> other functions, and returned as results.
Yes.
> 3. Function nesting with proper lexical scope (i.e. closures)
Yes.
> 4. Operator overloading (inc. the ability to define new operators)
Yes, check the operator module for names of operations.
> 5. Can I do this? print("Hello " .. "World") --> Hello World
Not precisely. You can do:
print "Hello","World"
print ("Hello " "World")
print "Hello "+"World"
and many other variants.
> 6. Constructors
If you mean class instantiation, yes.
> 7. "Chunks": as in a code block contained within a string, file, or
> delimited by some sort of notation (such as brackets) which can be
> passed to and from functions, stored in objects, with the option of
> local scoping of variables declared within it.
code = "print 'hello world'"
glbls = {}
lcls = {}
exec code, glbls, lcls
> 8. "Repeat-Until" as in :
> repeat
> line = os.read()
> until line ~= ""
> print(line)
line = sys.stdin.readline()
while line != '':
print line
line = sys.stdin.readline()
> 9. Generic for loops where " for i=1,f(x) do print(i) end" would print i
> only once.
for i in xrange(1,n+1,1):
print i
break
> 10. Can I call an object's method as object:method(arg) and have that
> translate into object.method(object, arg)
class foo:
def goo(self, arg):
print self, arg
def bar(arg):
print arg
bar = staticmethod(bar)
a = foo()
a.goo(arg) #will print information about the instance and argument
a.bar(arg) #will only print information about the argument
> 11. Can I make dynamic statements and nature like with eval() in Javascript?
Yes, check both eval and exec
> 12. Can I make calls to a function with a varying number of arguments?
Yes.
> 13. Named arguments
Yes.
> 14. Tables with built-in methods for manipulation such as sort, etc.
We call them lists.
> 15. Table filters
filter(callable, iterable)
> 15. Proper Tail Call (otherwise known as Proper Tail Recursion)
No, it kills tracebacks.
> 16. The ability to call a function without brackets
No.
> 17. Is the Python interpreter a JIT? Does it have a bytecode? Is it as
> fast as Java?
There is a module called Psyco that does do JIT compilation.
In the CPython implementation, bytecode is automatically generated.
If you want to know about speed, check a benchmark site.
> 18. The ability to modify the import/require functionality (how modules
> can be loaded)
Yes, you can write custom import hooks.
> 19. Coroutines and threads (non-preemptive)
Threads, yes. For corutines, check out greenlets or Stackless Python.
> 20. Date persistence and serialization
This can mean any one of a dozen things.
> 21. May modules be stored in variables, passed to and produced from
> functions, and so forth?
Yes, though it isn't done very often.
> 22. Is the self parameter hidden from me as a programmer? Can I
> hide/unhide it as I wish?
It is not hidden, in fact, you get to name it...
class foo:
def goo(I_AM_SELF, arg):
pass
> 23. Prototype-based OOP or the ability to extend a class without
> physically modifying it
We have unlimited subclassing. If you want prototypes, check out
Prothon.
> 24. Manual garbage management
You can disable it, or force collection.
gc.disable()
gc.collect()
> 25. A fully implemented .NET counterpart (I should be able to write
> Python scripts for both with the same code)
Check IronPython and PythonNET
> 26. How easily can other languages access it and vice versa?
C and C++ are easy. There is a TCL interface.
Anything with C or C++ interfaces are arguably trivial to talk to.
> 27. The option of mixing in static typing
Python has no static typing.
> 28. Automatic type coercion
Certain kinds of things can do what is known as "type coercion" in other
languages. What kinds of coercion did you want to do.
> 29. Is Python designed in such a way that I may merely "plugin" a
> C/C++/Java/D module which will then allow for mixing their syntax and
> perhaps even access to their facilities within Python?
You can call C/C++ functions in Python (a large portion of the standard
library is implemented in C).
Jython allows nearly transparent use of Python and Java.
You don't get other language syntaxes, generally.
> 30. Messaging syntax such as : [myColor setRed:0.0 green:0.5 blue:1.0]
> or [dog bring:paper to:me] and [[myAunt phone] setTo:[myUncle phone]]
> <--- Nested messages and [dog perform:sel_get_uid("bark")] which is the
> same as [dog bark]
We don't do messaging syntax. Combining messaging and object-oriented
syntax would make for an ugly language.
> 31. Concepts of Protocols (whereby one may organize related methods into
> groups and check whether a particular object implements the methods
> within this protocol), or Interfaces similar to those in Java whereby
> classes or objects which implement the interface (sign the contract)
> must implement the methods and attributes as specified in the interface,
> and/or programming by contract such as in Eiffel (see:
> http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=595)
No. Test-driven development is the norm in Python.
> 32. Support for unplanned reuse of classes such as in TOM
> (http://www.gerbil.org/tom/)
Subclassing.
> 33. Function/Method overloading
Yes.
> 34. In pure Python, can I change and add new constructs to the Python
> syntax?
Yes, if you are willing to work for it.
> 35. May I modify the garbage collector?
If you really want, though it already works fine.
> 36. May I implement control structures as object messages?
If you want.
> 37. Dynamic dispatch
This could mean a few different things.
> 38. Reflection and/or templates
Think subclasses.
> 39. Unicode
Yes.
> 40. Ability to call external APIs and DLLs with relative ease
Check pywin32.
> 41. How easy is it to port my Python code to C/C++/C# or Java?
Depends on how experienced you are with those languages.
> 42. The ability to assign a method(s) to a collection/group of objects
> [with a particular signature i.e.]
No.
> 43. Embedding variables in strings like: print "Hello, World. Time:
> #{Time.now}"
t = time.asctime()
print "Hello World %(t)s"%{'t':t}
print "Hello World %(t)s"%locals()
> 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
No.
> 45. Are all things objects in Python? Do all objects have built-in
> iterators and the like? i.e. can I do this:
> 3.times { print "Ho! " }
> puts "Merry Christmas"
Not everything has an iterator, though many does.
Next time, read the damn documentation.
- Josiah
More information about the Python-list
mailing list