mirror of
https://github.com/python/cpython.git
synced 2025-08-29 05:05:03 +00:00
Issue #20879: Delay the initialization of encoding and decoding tables for
base32, ascii85 and base85 codecs in the base64 module, and delay the initialization of the unquote_to_bytes() table of the urllib.parse module, to not waste memory if these modules are not used.
This commit is contained in:
parent
2a6053468e
commit
d6a91a7ab6
3 changed files with 54 additions and 19 deletions
|
@ -472,8 +472,7 @@ def urldefrag(url):
|
|||
return _coerce_result(DefragResult(defrag, frag))
|
||||
|
||||
_hexdig = '0123456789ABCDEFabcdef'
|
||||
_hextobyte = {(a + b).encode(): bytes([int(a + b, 16)])
|
||||
for a in _hexdig for b in _hexdig}
|
||||
_hextobyte = None
|
||||
|
||||
def unquote_to_bytes(string):
|
||||
"""unquote_to_bytes('abc%20def') -> b'abc def'."""
|
||||
|
@ -490,6 +489,12 @@ def unquote_to_bytes(string):
|
|||
return string
|
||||
res = [bits[0]]
|
||||
append = res.append
|
||||
# Delay the initialization of the table to not waste memory
|
||||
# if the function is never called
|
||||
global _hextobyte
|
||||
if _hextobyte is None:
|
||||
_hextobyte = {(a + b).encode(): bytes([int(a + b, 16)])
|
||||
for a in _hexdig for b in _hexdig}
|
||||
for item in bits[1:]:
|
||||
try:
|
||||
append(_hextobyte[item[:2]])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue