houbahop wrote:
Hello again everyone ,
var2[:]=[] has solved my problem, and I don't understand why it is programming by side effect.
I don't think it's bad, look at this, it's what I've done :


def Clear(lvar)
    lvar[:]=[]

def main (starting class)
   var1=[]
   var1.append('a')
   Clear(var1)

From http://en.wikipedia.org/wiki/Side-effect_(computer_science)

In computer science, a side-effect is a property of a programming language function that it modifies some state other than its return value.

Given this definition, I think you're fine -- clearing the list isn't a side effect of the function; it is the purpose of the function. Hence the function has no return value.[1]



Of course, in this simple case, I wouldn't be likely to write the clear function since the inline code is simpler and has less overhead:

def main()
    var1 = []
    var1.append('a')
    var1[:] = []

or, since in this case, you only care about var1, you can just rebind it (and let Python garbage-collect the old list):

def main()
    var1 = []
    var1.append('a')
    var1 = []

Steve

[1] Technically, all Python functions without a return statement return None, but for our purposes, we can consider a function like this to have "no return value".
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to