From: d.grigonis Date: Sat, 11 May 2024 20:55:23 +0000 (+0300) Subject: gh-118932: ChainMap.__contains__ performance improvement (gh-118946) X-Git-Tag: v3.14.0a1~1923 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cd4cfa6ed2fd5f866c7be339f1d3cf56aa4d2bad;p=thirdparty%2FPython%2Fcpython.git gh-118932: ChainMap.__contains__ performance improvement (gh-118946) --- diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index d06d84cbdfcc..a17100e6c02a 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -1016,7 +1016,7 @@ class ChainMap(_collections_abc.MutableMapping): return self.__missing__(key) # support subclasses that define __missing__ def get(self, key, default=None): - return self[key] if key in self else default + return self[key] if key in self else default # needs to make use of __contains__ def __len__(self): return len(set().union(*self.maps)) # reuses stored hash values if possible @@ -1028,7 +1028,10 @@ class ChainMap(_collections_abc.MutableMapping): return iter(d) def __contains__(self, key): - return any(key in m for m in self.maps) + for mapping in self.maps: + if key in mapping: + return True + return False def __bool__(self): return any(self.maps)