On 18 January 2012 09:52, Wilfried Falk <w_h_f...@yahoo.de> wrote: > Hello Pythons, > > attached to this email is a pdf-file which shows, that "+=" does not work > well all along. Mybe somebody of you is able to explain my observations in > this respect. I will be glad about an answer.
I think you are more likely to get answers if you post your code in the body of your message rather than attach it in a pdf, which is quite an unusual thing to do! """ 1.) For identifier += 1 you sometimes get print(); identifier = identifier + 1 What means that there is a prior print(). I could not find out a rule for when this happens --- but it does. By replaceing identifier += 1 with identifier = identifier + 1 the malfunction (print()) allways disappears """ I can't comment on this as you don't provide any code. """ 2.) Another "mystery" is shown by the code below. There _list += [something] is not the same as _list = _list + [something]. def conc1(a, _list = []): _list = _list + [a] return _list def conc2(a, _list = []): _list += [a] return _list # Main Program for i in range(4): _list = conc1(i) print(_list) print() for i in range(4): _list = conc2(i) print(_list) In the first case the result of print(_list) is: [0] [1] [2] [3] In the second case the result of print(_list) is: [0] [0, 1] [0, 1, 2] [0, 1, 2, 3] """ This behaviour is not a bug, it is a consequence of two things: 1. The way mutable default arguments work in Python. Your misunderstanding is a very common one for Python beginners. There's a good explanation of the behaviour here: http://effbot.org/zone/default-values.htm 2. The difference between lst += [a] and lst = lst + [a] The first one mutates the list object named 'lst' by appending 'a' at its end, whereas the second one creates a new list made of the items of lst with 'a' appended at the end. So your function conc1 does not mutate _list, whereas your function conc2 does. HTH -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list