if hasattr(func, "func"):
args = func.args + args
- tmpkw = func.keywords.copy()
- tmpkw.update(keywords)
- keywords = tmpkw
- del tmpkw
+ keywords = {**func.keywords, **keywords}
func = func.func
self = super(partial, cls).__new__(cls)
if not args:
raise TypeError("descriptor '__call__' of partial needs an argument")
self, *args = args
- newkeywords = self.keywords.copy()
- newkeywords.update(keywords)
- return self.func(*self.args, *args, **newkeywords)
+ keywords = {**self.keywords, **keywords}
+ return self.func(*self.args, *args, **keywords)
@recursive_repr()
def __repr__(self):
# it's also more efficient since only one function will be called
self.func = func.func
self.args = func.args + args
- self.keywords = func.keywords.copy()
- self.keywords.update(keywords)
+ self.keywords = {**func.keywords, **keywords}
else:
self.func = func
self.args = args
def _make_unbound_method(self):
def _method(*args, **keywords):
- call_keywords = self.keywords.copy()
- call_keywords.update(keywords)
- cls_or_self, *rest = args
- call_args = (cls_or_self,) + self.args + tuple(rest)
- return self.func(*call_args, **call_keywords)
+ cls_or_self, *args = args
+ keywords = {**self.keywords, **keywords}
+ return self.func(cls_or_self, *self.args, *args, **keywords)
_method.__isabstractmethod__ = self.__isabstractmethod__
_method._partialmethod = self
return _method
class CodePickler(pickle.Pickler):
- dispatch_table = {types.CodeType: pickle_code}
- dispatch_table.update(copyreg.dispatch_table)
+ dispatch_table = {types.CodeType: pickle_code, **copyreg.dispatch_table}
BUFSIZE = 8*1024
# Collect globals and locals. It is usually not really sensible to also
# complete builtins, and they clutter the namespace quite heavily, so we
# leave them out.
- ns = self.curframe.f_globals.copy()
- ns.update(self.curframe_locals)
+ ns = {**self.curframe.f_globals, **self.curframe_locals}
if '.' in text:
# Walk an attribute chain up to the last part, similar to what
# rlcompleter does. This will bail if any of the parts are not
Start an interactive interpreter whose global namespace
contains all the (global and local) names found in the current scope.
"""
- ns = self.curframe.f_globals.copy()
- ns.update(self.curframe_locals)
+ ns = {**self.curframe.f_globals, **self.curframe_locals}
code.interact("*interactive*", local=ns)
def do_alias(self, arg):
self.unredirected_hdrs.pop(header_name, None)
def header_items(self):
- hdrs = self.unredirected_hdrs.copy()
- hdrs.update(self.headers)
+ hdrs = {**self.unredirected_hdrs, **self.headers}
return list(hdrs.items())
class OpenerDirector:
if not isinstance(attrib, dict):
raise TypeError("attrib must be dict, not %s" % (
attrib.__class__.__name__,))
- attrib = attrib.copy()
- attrib.update(extra)
self.tag = tag
- self.attrib = attrib
+ self.attrib = {**attrib, **extra}
self._children = []
def __repr__(self):
additional attributes given as keyword arguments.
"""
- attrib = attrib.copy()
- attrib.update(extra)
+ attrib = {**attrib, **extra}
element = parent.makeelement(tag, attrib)
parent.append(element)
return element
the optional entities parameter. The keys and values must all be
strings; each key will be replaced with its corresponding value.
"""
- entities = entities.copy()
- entities.update({'\n': ' ', '\r': ' ', '\t':'	'})
+ entities = {**entities, '\n': ' ', '\r': ' ', '\t':'	'}
data = escape(data, entities)
if '"' in data:
if "'" in data: