+ 3
What is the difference between fun1 and fun2 ? Why arr in fun1 have old memory of first call while calling second time?
#Code: def fun1(val, arr=[]): for i in val: arr.append(i) return len(arr) def fun2(val): arr = [] for i in val: arr.append(i) return len(arr) print(fun1(range(4))+fun1(range(5))) print(fun2(range(4))+fun2(range(5))) #Output: 13 9
2 ответов
+ 3
In fun2 arr = [] resets the variable arr to an empty list each time the function is called. In fun1 arr is a parameter that will have a default of an empty list if arr is not already set or a value has not been previously passed. If you pass an empty list [] with the second call to fun1 the result will be the same as it is with fun2.
print(fun1(range(4))+fun1(range(5), []))
Or change fun1 as follows:
def fun1(val, arr=None):
if arr == None:
arr = []
for i in val:
arr.append(i)
return len(arr)
http://docs.python-guide.org/en/latest/writing/gotchas/
+ 4
@ChaoticDawg, thank you👍