New to Python: Features
Richard Blackwood
richardblackwood at cloudthunder.com
Tue Oct 5 00:33:52 EDT 2004
Josiah Carlson wrote:
>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
>
>
>
I can't believe you answered all of them, thank you. Sorry for pissing
folks off over here.
More information about the Python-list
mailing list