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