Unverified Kaydet (Commit) da084704 authored tarafından Serhiy Storchaka's avatar Serhiy Storchaka Kaydeden (comit) GitHub

bpo-36431: Use PEP 448 dict unpacking for merging two dicts. (GH-12553)

üst 384b81d9
...@@ -285,10 +285,7 @@ class partial: ...@@ -285,10 +285,7 @@ class partial:
if hasattr(func, "func"): if hasattr(func, "func"):
args = func.args + args args = func.args + args
tmpkw = func.keywords.copy() keywords = {**func.keywords, **keywords}
tmpkw.update(keywords)
keywords = tmpkw
del tmpkw
func = func.func func = func.func
self = super(partial, cls).__new__(cls) self = super(partial, cls).__new__(cls)
...@@ -302,9 +299,8 @@ class partial: ...@@ -302,9 +299,8 @@ class partial:
if not args: if not args:
raise TypeError("descriptor '__call__' of partial needs an argument") raise TypeError("descriptor '__call__' of partial needs an argument")
self, *args = args self, *args = args
newkeywords = self.keywords.copy() keywords = {**self.keywords, **keywords}
newkeywords.update(keywords) return self.func(*self.args, *args, **keywords)
return self.func(*self.args, *args, **newkeywords)
@recursive_repr() @recursive_repr()
def __repr__(self): def __repr__(self):
...@@ -371,8 +367,7 @@ class partialmethod(object): ...@@ -371,8 +367,7 @@ class partialmethod(object):
# it's also more efficient since only one function will be called # it's also more efficient since only one function will be called
self.func = func.func self.func = func.func
self.args = func.args + args self.args = func.args + args
self.keywords = func.keywords.copy() self.keywords = {**func.keywords, **keywords}
self.keywords.update(keywords)
else: else:
self.func = func self.func = func
self.args = args self.args = args
...@@ -391,11 +386,9 @@ class partialmethod(object): ...@@ -391,11 +386,9 @@ class partialmethod(object):
def _make_unbound_method(self): def _make_unbound_method(self):
def _method(*args, **keywords): def _method(*args, **keywords):
call_keywords = self.keywords.copy() cls_or_self, *args = args
call_keywords.update(keywords) keywords = {**self.keywords, **keywords}
cls_or_self, *rest = args return self.func(cls_or_self, *self.args, *args, **keywords)
call_args = (cls_or_self,) + self.args + tuple(rest)
return self.func(*call_args, **call_keywords)
_method.__isabstractmethod__ = self.__isabstractmethod__ _method.__isabstractmethod__ = self.__isabstractmethod__
_method._partialmethod = self _method._partialmethod = self
return _method return _method
......
...@@ -64,8 +64,7 @@ def dumps(obj, protocol=None): ...@@ -64,8 +64,7 @@ def dumps(obj, protocol=None):
class CodePickler(pickle.Pickler): class CodePickler(pickle.Pickler):
dispatch_table = {types.CodeType: pickle_code} dispatch_table = {types.CodeType: pickle_code, **copyreg.dispatch_table}
dispatch_table.update(copyreg.dispatch_table)
BUFSIZE = 8*1024 BUFSIZE = 8*1024
......
...@@ -491,8 +491,7 @@ class Pdb(bdb.Bdb, cmd.Cmd): ...@@ -491,8 +491,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
# Collect globals and locals. It is usually not really sensible to also # Collect globals and locals. It is usually not really sensible to also
# complete builtins, and they clutter the namespace quite heavily, so we # complete builtins, and they clutter the namespace quite heavily, so we
# leave them out. # leave them out.
ns = self.curframe.f_globals.copy() ns = {**self.curframe.f_globals, **self.curframe_locals}
ns.update(self.curframe_locals)
if '.' in text: if '.' in text:
# Walk an attribute chain up to the last part, similar to what # Walk an attribute chain up to the last part, similar to what
# rlcompleter does. This will bail if any of the parts are not # rlcompleter does. This will bail if any of the parts are not
...@@ -1377,8 +1376,7 @@ class Pdb(bdb.Bdb, cmd.Cmd): ...@@ -1377,8 +1376,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
Start an interactive interpreter whose global namespace Start an interactive interpreter whose global namespace
contains all the (global and local) names found in the current scope. contains all the (global and local) names found in the current scope.
""" """
ns = self.curframe.f_globals.copy() ns = {**self.curframe.f_globals, **self.curframe_locals}
ns.update(self.curframe_locals)
code.interact("*interactive*", local=ns) code.interact("*interactive*", local=ns)
def do_alias(self, arg): def do_alias(self, arg):
......
...@@ -426,8 +426,7 @@ class Request: ...@@ -426,8 +426,7 @@ class Request:
self.unredirected_hdrs.pop(header_name, None) self.unredirected_hdrs.pop(header_name, None)
def header_items(self): def header_items(self):
hdrs = self.unredirected_hdrs.copy() hdrs = {**self.unredirected_hdrs, **self.headers}
hdrs.update(self.headers)
return list(hdrs.items()) return list(hdrs.items())
class OpenerDirector: class OpenerDirector:
......
...@@ -169,10 +169,8 @@ class Element: ...@@ -169,10 +169,8 @@ class Element:
if not isinstance(attrib, dict): if not isinstance(attrib, dict):
raise TypeError("attrib must be dict, not %s" % ( raise TypeError("attrib must be dict, not %s" % (
attrib.__class__.__name__,)) attrib.__class__.__name__,))
attrib = attrib.copy()
attrib.update(extra)
self.tag = tag self.tag = tag
self.attrib = attrib self.attrib = {**attrib, **extra}
self._children = [] self._children = []
def __repr__(self): def __repr__(self):
...@@ -451,8 +449,7 @@ def SubElement(parent, tag, attrib={}, **extra): ...@@ -451,8 +449,7 @@ def SubElement(parent, tag, attrib={}, **extra):
additional attributes given as keyword arguments. additional attributes given as keyword arguments.
""" """
attrib = attrib.copy() attrib = {**attrib, **extra}
attrib.update(extra)
element = parent.makeelement(tag, attrib) element = parent.makeelement(tag, attrib)
parent.append(element) parent.append(element)
return element return element
......
...@@ -56,8 +56,7 @@ def quoteattr(data, entities={}): ...@@ -56,8 +56,7 @@ def quoteattr(data, entities={}):
the optional entities parameter. The keys and values must all be the optional entities parameter. The keys and values must all be
strings; each key will be replaced with its corresponding value. strings; each key will be replaced with its corresponding value.
""" """
entities = entities.copy() entities = {**entities, '\n': '
', '\r': '
', '\t':'	'}
entities.update({'\n': '
', '\r': '
', '\t':'	'})
data = escape(data, entities) data = escape(data, entities)
if '"' in data: if '"' in data:
if "'" in data: if "'" in data:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment