Вы отправляете строковый литерал "finish"
вместо переменной с именем finish
, в которой текст запроса имеет строковое значение (var finish = JSON.stringify(obj)
). попробуйте изменить на xhttp.send(finish)
Также следует упомянуть тип контента xhttp.setRequestHeader('Content-type', 'application/json')
до вызова send
.
Как другие ответы предположили, можно предоставить функции копию списка.
Как альтернатива, Ваша функция могла сделать копию аргумента:
def burninate(b):
c = []
b = list(b)
for i in range(3):
c.append(b.pop())
return c
В основном необходимо быть ясными в уме (и в документации), изменит ли функция свои аргументы. По-моему, функции, которые возвращают вычисленные значения, не должны изменять свои аргументы, и функции, которые изменяют их аргументы, ничего не должны возвращать. См. Python [] .sort (), [] .extend (), {} .update (), и т.д. для примеров. Очевидно, существуют исключения (как .pop ()).
Кроме того, в зависимости от Вашего особого случая Вы могли переписать функцию для избегания использования поп () или другие функции, которые изменяют аргумент. например.
def burninante(b):
return b[:-4:-1] # return the last three elements in reverse order
Можно звонить burninate()
с копией списка как это:
d = burninate(a[:])
или,
d = burninate(list(a))
Другая альтернатива должна сделать копию списка в Вашем методе:
def burninate(b):
c=[]
b=b[:]
for i in range(3):
c.append(b.pop())
return c
>>> a = range(6)
>>> b = burninate(a)
>>> print a, b
>>> [0, 1, 2, 3, 4, 5] [5, 4, 3]
Более общее решение было бы к import copy
, и используйте copy.copy()
на параметре.
Немного больше читаемого способа сделать то же самое:
d = burninate(list(a))
Здесь, list()
конструктор создает новый список на основе a
.
Другие версии:
def burninate(b):
c = []
for i in range(1, 4):
c.append(b[-i])
return c
def burninate(b):
c = b[-4:-1]
c.reverse()
return c
И когда-нибудь Вы будете любить понимания списка:
def burninate(b):
return [b[-i] for i in range(1,4)]