Dangerous default value {} as argument
267 diff_label=None,
268 diff_fmt="-r",
269 diff_cmap=cm.hsv,
270 diff_kws={}, # @UndefinedVariable cm.PiYG271 title=None,
272 x_label=None,
273 y_label=None,
Dangerous default value {} as argument
263 data_label,
264 ref_label=None,
265 data_fmt="+k",
266 data_kws={},267 diff_label=None,
268 diff_fmt="-r",
269 diff_cmap=cm.hsv,
Dangerous default value {} as argument
200 data_fmt="+k",
201 data_kws={},
202 ref_fmt=".g",
203 ref_kws={},204 title=None,
205 x_label=None,
206 y_label=None,
Dangerous default value {} as argument
198 data_label,
199 diff_label=None,
200 data_fmt="+k",
201 data_kws={},202 ref_fmt=".g",
203 ref_kws={},
204 title=None,
Dangerous default value [] as argument
366 return V
367
368
369def merge(a, b, path=[]):370 """'merges b into a"""
371
372 for key in b.keys():
Description
Do not use a mutable like list
or dictionary
as a default value to an argument. Python’s default arguments are evaluated once when the function is defined. Using a mutable default argument and mutating it will mutate that object for all future calls to the function as well.
Bad practice
def my_function(elem, l=[]):
l.append(elem)
return l
print(my_function(2)) # [2]
print(my_function(5)) # [2, 5]
Recommended:
def my_function(elem, l=None):
if l is None:
l = []
l.append(elem)
return l
print(my_function(2)) # [2]
print(my_function(5)) # [5]