ссылка на bytearray или тип значения? - PullRequest
0 голосов
/ 09 сентября 2018

В Python, когда bytearray передается функции, он передается по ссылке или по значению?

В Python 3.7 я пытаюсь смоделировать объект HTTPResponse для тестирования. Когда я копирую код из объекта http.client.HTTPResponse, я получаю результат, отличный от того, который получает стандартная библиотека.

Мой код:

#I call the mock buffer like this
intBytesBuffered = self.HTTPResponseMock.readinto(tempBuffer)

HTTPResponseMock

def read(self, amt = None):

    if amt is not None:
        # Amount is given, implement using readinto
        b = bytearray(amt)
    else:
        b = bytearray(len(self.MockedContentBuffer))

    n = self.readinto(b)
    return memoryview(b)[:n].tobytes()

def readinto(self, b):
    """docstring"""

    #mvb = memoryview(b)
    bufferSize = len(b)
    contentSize = len(self.MockedContentBuffer)
    b.clear()
    if bufferSize >= contentSize:
        b = self.MockedContentBuffer
    else:
        b = self.MockedContentBuffer[0:bufferSize]
        del self.MockedContentBuffer[0:bufferSize]

    return len(b)

Найдены нужные функции из http.client.HTTPResponse здесь строки 436-500

Самый важный отрывок из стандартной библиотеки - здесь, где read readto вызывает:

b = bytearray(amt)
n = self.readinto(b)
return memoryview(b)[:n].tobytes()

Стандартная библиотека делает почти то же самое при вызове буфера, как и я, но когда она запускается, байтовая библиотека b в отрывке возвращает данные внутри нее. Когда я вызываю read, tempBuffer возвращается пустым?

...