Pass by reference?

Shae Erisson shapr at uab.edu
Thu May 25 05:51:08 EDT 2000


Dale Strickland-Clark wrote:
> 
> There isn't much else that's relevant around this statement.
> 
> DBCon is an ADO connection object. This statement deletes some rows in a
> database and should return the number deleted in delcnt - the second
> argument. However, delcnt is always zero regardless of actual count deleted.
> 
>     delcnt = 0
>     print DBCon.Execute("delete from parts where path='%s' and drive='%s'" %
> (path, drive), delcnt, 1)
>     print delcnt
> 
> However, I stuck a print statement on the front to see what was returned and
> found a list of two items, the second of which is the count I want - but why
> isn't it returned where it should be?

I don't know what code/module etc you're using, but Python's roots are a
bit more towards functional languages than some other languages, that
means that often a call will return its output rather than assigning it
to a status variable you've passed into it.

You may want to try:
x = DBCon.Execute(stuff)
and then read from x to get your delcnt.

> Also the following program proves to me that arguments are passed by value
> and not by reference:
> 
> def wibble(var):
>     var = 1
> 
> x = 0
> wibble(x)
> print x
> 
> It prints 0 showing that the assignment in wibble is made to a copy of x
> 
> So - how do I pass a variable to a function/subroutine/method by reference?

try this:
def wibble(var):
    print 'var value before is', var
    print 'do var and x have exactly the same address in memory?',x is
var
    var = 2
    print 'var value after is', var
    print 'do var and x have exactly the same address in memory?',x is
var

x = 0
wibble(x)
print x

what this means is that you're making a new reference named var inside
the function, rather than changing the variable in the scope 'above' the
function.
-- 
sHae mAtijs eRisson (sHae at wEbwitchEs.coM) gEnius fOr hIre
   bRing mE fIve sQuirrels aNd nO oNe wIll gEt hUrt
13:00pm up 1 season, 1 squirrel, load average: 1+1j 0.5+2j 0.2+0.5j



More information about the Python-list mailing list