1
我這樣做的工作,我寫了一個簡單的二進制輸出類似的格式json與simpleubjson不一樣,但我的代碼更慢,而simipleubjson更快,我注意到simplubjson使用接受類型作爲關鍵字的字典,請你指導我如何有用?這個字典在simpleubjson中如何工作python編碼?
調度= {}
def __init__(self, default=None):
self._default = default or self.default
def default(self, obj):
raise EncodeError('unable to encode %r' % obj)
def encode_next(self, obj):
tobj = type(obj)
if tobj in self.dispatch:
res = self.dispatch[tobj](self, obj)
else:
return self.encode_next(self._default(obj))
if isinstance(res, bytes):
return res
return bytes().join(res)
def encode_noop(self, obj):
return NOOP
dispatch[type(NOOP_SENTINEL)] = encode_noop
def encode_none(self, obj):
return NULL
dispatch[type(None)] = encode_none
def encode_bool(self, obj):
return TRUE if obj else FALSE
dispatch[bool] = encode_bool
def encode_int(self, obj):
if (-2 ** 7) <= obj <= (2 ** 7 - 1):
return INT8 + CHARS[obj % 256]
elif (-2 ** 15) <= obj <= (2 ** 15 - 1):
return INT16 + pack('>h', obj)
elif (-2 ** 31) <= obj <= (2 ** 31 - 1):
return INT32 + pack('>i', obj)
elif (-2 ** 63) <= obj <= (2 ** 63 - 1):
return INT64 + pack('>q', obj)
else:
return self.encode_decimal(Decimal(obj))
dispatch[int] = encode_int
dispatch[long] = encode_int