我们从Python开源项目中,提取了以下3个代码示例,用于说明如何使用codecs.make_identity_dict()。
def _256_exception_codec(name,exceptions,rexceptions,baseRange=range(32,256)): import codecs decoding_map = codecs.make_identity_dict(baseRange) decoding_map.update(exceptions) encoding_map = codecs.make_encoding_map(decoding_map) if rexceptions: encoding_map.update(rexceptions) ### Codec APIs class Codec(codecs.Codec): def encode(self,input,errors='strict',charmap_encode=codecs.charmap_encode,encoding_map=encoding_map): return charmap_encode(input,errors,encoding_map) def decode(self,input,errors='strict',charmap_decode=codecs.charmap_decode,decoding_map=decoding_map): return charmap_decode(input,errors,decoding_map) class StreamWriter(Codec,codecs.StreamWriter): pass class StreamReader(Codec,codecs.StreamReader): pass C = Codec() return codecs.CodecInfo(C.encode,C.decode,streamreader=StreamReader,streamwriter=StreamWriter,name=name)
def python_mapdef_code(varname, map, comments=1, precisions=(2, 4)): l = [] append = l.append if "IDENTITY" in map: append("%s = codecs.make_identity_dict(range(%d))" % (varname, map["IDENTITY"])) append("%s.update({" % varname) splits = 1 del map["IDENTITY"] identity = 1 else: append("%s = {" % varname) splits = 0 identity = 0 mappings = sorted(map.items()) i = 0 key_precision, value_precision = precisions for mapkey, mapvalue in mappings: mapcomment = '' if isinstance(mapkey, tuple): (mapkey, mapcomment) = mapkey if isinstance(mapvalue, tuple): (mapvalue, mapcomment) = mapvalue if mapkey is None: continue if (identity and mapkey == mapvalue and mapkey < 256): # No need to include identity mappings, since these # are already set for the first 256 code points. continue key = hexrepr(mapkey, key_precision) value = hexrepr(mapvalue, value_precision) if mapcomment and comments: append(' %s: %s,\t# %s' % (key, value, mapcomment)) else: append(' %s: %s,' % (key, value)) i += 1 if i == 4096: # Split the definition into parts to that the Python # parser doesn't dump core if splits == 0: append('}') else: append('})') append('%s.update({' % varname) i = 0 splits = splits + 1 if splits == 0: append('}') else: append('})') return l