Тема замусолена до невозможности, но не удержался увидев код Request
def func(f, l=[]):
l.append(f)
return l
func является потенциально опасной. Смотрим что происходит при её использовании
>>> print(func(1))
[1]
>>> print(func(2))
[1, 2]
l ссылается на один и тот же объект, который все время и изменяется (вспоминаем концепцию python)
Решение очевидное - определить список в функции
Такое решение используется и в популярном фреймворке request
class Request(RequestHooksMixin):
def __init__(self,
method=None,
url=None,
headers=None,
files=None,
data=None,
params=None,
auth=None,
cookies=None,
hooks=None):
# Default empty dicts for dict params.
data = [] if data is None else data
files = [] if files is None else files
headers = {} if headers is None else headers
params = {} if params is None else params
hooks = {} if hooks is None else hooks
def func(f, l=[]):
l.append(f)
return l
func является потенциально опасной. Смотрим что происходит при её использовании
>>> print(func(1))
[1]
>>> print(func(2))
[1, 2]
l ссылается на один и тот же объект, который все время и изменяется (вспоминаем концепцию python)
Решение очевидное - определить список в функции
Такое решение используется и в популярном фреймворке request
class Request(RequestHooksMixin):
def __init__(self,
method=None,
url=None,
headers=None,
files=None,
data=None,
params=None,
auth=None,
cookies=None,
hooks=None):
# Default empty dicts for dict params.
data = [] if data is None else data
files = [] if files is None else files
headers = {} if headers is None else headers
params = {} if params is None else params
hooks = {} if hooks is None else hooks