I discovered Python a few months ago and soon decided to invest time in learning it well. While surfing the net for Python, I also saw the hype over Ruby and tried to find out more about it, before I definitely embarked on studying and practicing Python. I recently found two sufficient answers for choosing Python - which is a personal choice and others may differ, but I'd like to share it anyway :
1) In Ruby there is a risk of "Variable/Method Ambiguity" when calling a method with no parameters without using () : Here is an excerpt from the book "Programming Ruby The Pragmatic Programmer's Guide". http://www.rubycentral.com/book/language.html "When Ruby sees a name such as ``a'' in an expression, it needs to determine if it is a local variable reference or a call to a method with no parameters. To decide which is the case, Ruby uses a heuristic. As Ruby reads a source file, it keeps track of symbols that have been assigned to. It assumes that these symbols are variables. When it subsequently comes across a symbol that might be either a variable or a method call, it checks to see if it has seen a prior assignment to that symbol. If so, it treats the symbol as a variable; otherwise it treats it as a method call. As a somewhat pathological case of this, consider the following code fragment, submitted by Clemens Hintze." def a print "Function 'a' called\n" 99 end for i in 1..2 if i == 2 print "a=", a, "\n" else a = 1 print "a=", a, "\n" end end OUTPUTS >> a=1 Function 'a' called a=99 "During the parse, Ruby sees the use of ``a'' in the first print statement and, as it hasn't yet seen any assignment to ``a,'' assumes that it is a method call. By the time it gets to the second print statement, though, it has seen an assignment, and so treats ``a'' as a variable. Note that the assignment does not have to be executed---Ruby just has to have seen it. This program does not raise an error." I tried the code above at the interactive Ruby 1.8.2 interpreter : http://www.ruby.ch/tutorial/ 2) Ruby does not have true first-class functions living in the same namespace as other variables while Python does : In Python : def sayHello (name) : return "Hello " + name print sayHello("Mr. Bond") m = sayHello print m print m("Miss Moneypenny") OUTPUTS >> Hello Mr. Bond <function sayHello at 0x0102E870> Hello Miss Moneypenny In Ruby you need extra syntax that ruins the "first-class-ness" : def sayHello (name) return "Hello " + name end puts sayHello("Mr. Bond") m = Class.method(:sayHello) puts m puts m.call("Miss Moneypenny") OUTPUTS >> Hello Mr. Bond #<Method: Class(Object)#sayHello> Hello Miss Moneypenny 4) Conclusion Since I did a lot of work in Scheme, rigor and consistency are most important to me, and Python certainly meets this requirement. --- Python newbie -- http://mail.python.org/mailman/listinfo/python-list