2013-12-08 57 views
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 

回答