New to Python: Features
Richard Blackwood
richardblackwood at cloudthunder.com
Tue Oct 5 01:23:55 EDT 2004
<SNIP>
>
>
> code = "print 'hello world'"
> glbls = {}
> lcls = {}
>
> exec code, glbls, lcls
>
This is a cool language, I love code chunks!!
>
>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
>
How come Python always complains when I don't include the self parameter
in an object method? Your code doesn't work on my interpreter.
>
>>15. Proper Tail Call (otherwise known as Proper Tail Recursion)
>
>
> No, it kills tracebacks.
I know but that's a real bummer. No way around that?
>
>
>>16. The ability to call a function without brackets
>
>
> No.
>
So is the print statement ironed into the language and not a function?
>
>>17. Is the Python interpreter a JIT? Does it have a bytecode? Is it as
>>fast as Java?
>
yes, you can write custom import hooks.
>
I guess I'll hit the docs with how to do this.
>
>>20. Date persistence and serialization
>
>
> This can mean any one of a dozen things.
>
I'd like to store function and variables and of course objects in a form
that can be easily read back into the program/script.
>
>
>>21. May modules be stored in variables, passed to and produced from
>>functions, and so forth?
>
>
> Yes, though it isn't done very often.
>
Oh really?? Exciting, I'm glad of it. Hit the docs I must!
>
>>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
>
Cool!
>>25. A fully implemented .NET counterpart (I should be able to write
>>Python scripts for both with the same code)
>
>
> Check IronPython and PythonNET
>
Not fully implemented, but I guess that will have to suffice.
>
>>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.
>
I guess D should work then.
>
>>27. The option of mixing in static typing
>
>
> Python has no static typing.
>
Argg!
>
>>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.
>
I'd like to be able to use a string as an integer without an explicit
coerion on my part for example.
>
>>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.
Ugly? I disagree, but hey, what do I know? Objective-C is OOP and
messaging is awesome. I love Python though, a hybrid between the two
would be great.
>
>
>>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.
>
That is quite a shame, no modules for this either huh?
>>34. In pure Python, can I change and add new constructs to the Python
>>syntax?
>
>
> Yes, if you are willing to work for it.
>
I expect the docs will tell me how to do this.
>
>>35. May I modify the garbage collector?
>
>
> If you really want, though it already works fine.
>
Oh, I just like to play with garbage collectors. It's a kind of fettish
of mine.
>
>>37. Dynamic dispatch
>
>
> This could mean a few different things.
>
Like virtual functions in C++
>>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.
>
What I actually meant was are there any facilities (built-in or modules)
which allow for automatic compilation to C/C++/C#/D. For example,
particular Smalltalk distros compile to C as does ObjC.
>
>>42. The ability to assign a method(s) to a collection/group of objects
>>[with a particular signature i.e.]
>
>
> No.
>
That's no good. I wonder if I could implement this myself with minimum
pain.
>
>>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()
>
That is messy, exactly why I wanted the kind of clear embedding I gave
an example for. Oh well.
>
>>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.
>
Really? Hmmmm, does anyone know of a bridge between Python and Ruby?
----------------
Thanks Josiah. I'm perusing the docs right now.
More information about the Python-list
mailing list