On Oct 28, 11:59 am, Joe Strout <[EMAIL PROTECTED]> wrote: > ... > > There are only the two cases, which Greg quite succinctly and > accurately described above. One is by value, the other is by > reference. Python quite clearly uses by value. Parameters are > expressions that are evaluated, and the resulting value copied into > the formal parameter, pure and simple. The continued attempts to > obfuscate this is pointless and wrong. > > Best, > - Joe
Joe, you are being too generous and expansive here. [Play along with me for a minute here...] Don't you know? There is really only *ONE* case, and, you are right, it is Pass By Value. There is no such thing as Pass By Reference at the physical CPU level at all, right? If there is, show it to me. Pass By Reference is just a silly idiom developed by high-minded CS academics to confuse the rest of us. It has no practical use and should not be given its own name, when we already have a good an proper name for it. Let me demonstrate with 3 examples of a function definition, and the appropriate calling syntax for that function in C++, all sharing the common "int i" global variable: int i = 5; myfunc(int &val){} /*CALL:*/ myfunc(i); // "ByRef" (ya, right!) myfunc(int val){} /*CALL:*/ myfunc(i); // ByVal myfunc(int *val){} /*CALL:*/ myfunc(&i); // Joe's ByVal The first is what all the fakers call "Pass By Reference" - sheesh, how naive. We all know that what *really* happens internally is that the *address* of val (A VALUE itself, or course) is copied and passed on the stack, right? There couldn't be a more straightforward example of Pass By Value (unless it's an inline function, or optimized away, or possibly when implemented in a VM, or...). It passes the *address* of i by value, then we can access the *value* of i too via indirection. Hmm, did we need to have two definitions of VALUE there? Well, never mind, no one will notice... The next is obviously pass by value. It's right out there. The value of i (which is what we are talking about, right?) is copied out, and passed right on the stack in plain daylight where we can all see it. How about the third? Pass By Value, obviously, of course. This is the version you are defending, right? The parameter's value, &i, is evaluated and copied right onto the stack, just like in the first example. In fact, if you compare the assembler output of the first and third examples, you may not even see a difference. Never mind the actual contents of that pesky "i" variable that most people are referring to when they use the term "value". We don't need to dress up example 3 and call it an "idiom" where we are really passing a so- called "reference" of the variable "i". Indeed! Don't insult our intelligence. We can all see that it's an address passed by value, plain and simple. Pass By Reference? So "postmodern". Who needs it. Show me a so-called "reference". I've looked at the assembler output and have never seen one. There is no such thing. "The continued attempts to obfuscate this is pointless and wrong." --------------- I hate to have to add this, but for those not paying close attention: ;-) dale (tongue back out of cheek now) -- http://mail.python.org/mailman/listinfo/python-list