Problem with assigning variables of type List
Paul Foley
see at below
Tue Aug 20 20:20:36 EDT 2002
On Tue, 20 Aug 2002 16:41:01 GMT, Fredrik Lundh wrote:
> Peter Hansen wrote:
>> > if it were passed by reference, you'd see [42] on the last line.
>>
>> Nope. Assignment works by rebinding the name to something else,
>> in effect changing the reference. There is no pass by value in
>> Python. (Although somebody may still refute this successfully,
>> but I don't think you have so far.)
> Paul uses his own dictionary of computing terms, and can thus
> prove or refute anything he wants.
Wrong. It's you who have your own dictionary.
>> Maybe the issue is that these conventional terms do not apply
>> to Python as well as they do to more conventional languages...
> The conventional terms work just fine for Python, if you use them
> in the conventional way (e.g. see FOLDOC). I'm sure Paul knows
Fine, let's see what FOLDOC has to say, shall we? :-
CALL-BY-VALUE:
(CBV) An evaluation strategy where arguments are evaluated before
the function or procedure is entered. Only the values of the
arguments are passed and changes to the arguments within the called
procedure have no effect on the actual arguments as seen by the
caller. See applicative order reduction, call-by-value-result,
strict evaluation, call-by-name, lazy evaluation.
So: arguments are evaluated before the function or procedure is
entered? Yup, Python does that. Only the values are passed, and
changes to the arguments within the called procedure have no effect on
the actual arguments as seen by the caller? Right again. Python
meets that definition. I guess it's call-by-value (what a surprise!)
CALL-BY-REFERENCE
An argument passing convention where the address of an argument
variable is passed to a function or procedure, as opposed to where
the value of the argument expression is passed. Execution of the
function or procedure may have side-effects on the actual argument
as seen by the caller. The C language's "&" (address of) and "*"
(dereference) operators allow the programmer to code explicit
call-by-reference. Other languages provide special syntax to declare
reference arguments (e.g. ALGOL 60). See also call-by-name,
call-by-value, call-by-value-result.
So, the address of the argument variable is passed? Not in Python[1].
Execution of the function or procedure may have side-effects on the
actual argument as seen by the caller? Not in Python. Python fails
to meet this definition. I guess it's not call-by-reference
(surprises everywhere you look, today!)
Yes, the conventional terms work just fine for Python, if you use them
in the conventional way. And if you do that, it's call by value.
Time to revise your personal dictionary, Fredrik?!
> (Paul uses the term "value" to mean what most other people, in-
> cluding FOLDOC, would call a "reference".
Wrong again.
[1] The variable contains an address, and that address is passed to
the function; that's not at all the same thing as passing the address
of the variable.
--
Just because we Lisp programmers are better than everyone else is no
excuse for us to be arrogant. -- Erann Gat
(setq reply-to
(concatenate 'string "Paul Foley " "<mycroft" '(#\@) "actrix.gen.nz>"))
More information about the Python-list
mailing list