mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
Convert some custom sort comparison functions to equivalent key functions.
This commit is contained in:
parent
fd66e51c4c
commit
d4cb56d4e8
12 changed files with 50 additions and 20 deletions
|
@ -88,6 +88,15 @@ class LikeCond(Cond):
|
||||||
def __call__(self, s):
|
def __call__(self, s):
|
||||||
return self.re.match(s.decode(self.encoding))
|
return self.re.match(s.decode(self.encoding))
|
||||||
|
|
||||||
|
def CmpToKey(mycmp):
|
||||||
|
'Convert a cmp= function into a key= function'
|
||||||
|
class K(object):
|
||||||
|
def __init__(self, obj, *args):
|
||||||
|
self.obj = obj
|
||||||
|
def __lt__(self, other):
|
||||||
|
return mycmp(self.obj, other.obj) == -1
|
||||||
|
return K
|
||||||
|
|
||||||
#
|
#
|
||||||
# keys used to store database metadata
|
# keys used to store database metadata
|
||||||
#
|
#
|
||||||
|
@ -587,7 +596,7 @@ class bsdTableDB :
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
conditionlist = list(conditions.items())
|
conditionlist = list(conditions.items())
|
||||||
conditionlist.sort(cmp_conditions)
|
conditionlist.sort(key=CmpToKey(cmp_conditions))
|
||||||
|
|
||||||
# Apply conditions to column data to find what we want
|
# Apply conditions to column data to find what we want
|
||||||
cur = self.db.cursor()
|
cur = self.db.cursor()
|
||||||
|
|
|
@ -32,10 +32,20 @@ _expected_lexical_test_data = [s.encode('ascii') for s in
|
||||||
_expected_lowercase_test_data = [s.encode('ascii') for s in
|
_expected_lowercase_test_data = [s.encode('ascii') for s in
|
||||||
('', 'a', 'aaa', 'b', 'c', 'CC', 'cccce', 'ccccf', 'CCCP')]
|
('', 'a', 'aaa', 'b', 'c', 'CC', 'cccce', 'ccccf', 'CCCP')]
|
||||||
|
|
||||||
|
|
||||||
|
def CmpToKey(mycmp):
|
||||||
|
'Convert a cmp= function into a key= function'
|
||||||
|
class K(object):
|
||||||
|
def __init__(self, obj, *args):
|
||||||
|
self.obj = obj
|
||||||
|
def __lt__(self, other):
|
||||||
|
return mycmp(self.obj, other.obj) == -1
|
||||||
|
return K
|
||||||
|
|
||||||
class ComparatorTests (unittest.TestCase):
|
class ComparatorTests (unittest.TestCase):
|
||||||
def comparator_test_helper (self, comparator, expected_data):
|
def comparator_test_helper (self, comparator, expected_data):
|
||||||
data = expected_data[:]
|
data = expected_data[:]
|
||||||
data.sort (comparator)
|
data.sort (key=CmpToKey(comparator))
|
||||||
self.failUnless (data == expected_data,
|
self.failUnless (data == expected_data,
|
||||||
"comparator `%s' is not right: %s vs. %s"
|
"comparator `%s' is not right: %s vs. %s"
|
||||||
% (comparator, expected_data, data))
|
% (comparator, expected_data, data))
|
||||||
|
|
|
@ -123,7 +123,7 @@ elif os.name == "posix":
|
||||||
res = re.findall(expr, data)
|
res = re.findall(expr, data)
|
||||||
if not res:
|
if not res:
|
||||||
return _get_soname(_findLib_gcc(name))
|
return _get_soname(_findLib_gcc(name))
|
||||||
res.sort(cmp= lambda x,y: cmp(_num_version(x), _num_version(y)))
|
res.sort(key=_num_version)
|
||||||
return res[-1]
|
return res[-1]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -125,7 +125,7 @@ def expand_substates(states):
|
||||||
statelist = []
|
statelist = []
|
||||||
for state in states:
|
for state in states:
|
||||||
substates = list(set(state & x for x in states))
|
substates = list(set(state & x for x in states))
|
||||||
substates.sort(lambda a,b: nbits(b) - nbits(a))
|
substates.sort(key=nbits, reverse=True)
|
||||||
statelist.append(substates)
|
statelist.append(substates)
|
||||||
return statelist
|
return statelist
|
||||||
|
|
||||||
|
|
|
@ -398,7 +398,7 @@ class FileTreeItem(TreeItem):
|
||||||
names = os.listdir(self.path)
|
names = os.listdir(self.path)
|
||||||
except os.error:
|
except os.error:
|
||||||
return []
|
return []
|
||||||
names.sort(lambda a, b: cmp(os.path.normcase(a), os.path.normcase(b)))
|
names.sort(key = os.path.normcase)
|
||||||
sublist = []
|
sublist = []
|
||||||
for name in names:
|
for name in names:
|
||||||
item = FileTreeItem(os.path.join(self.path, name))
|
item = FileTreeItem(os.path.join(self.path, name))
|
||||||
|
|
|
@ -324,8 +324,7 @@ def _main():
|
||||||
path = []
|
path = []
|
||||||
dict = readmodule_ex(mod, path)
|
dict = readmodule_ex(mod, path)
|
||||||
objs = dict.values()
|
objs = dict.values()
|
||||||
objs.sort(lambda a, b: cmp(getattr(a, 'lineno', 0),
|
objs.sort(key=lambda a: getattr(a, 'lineno', 0))
|
||||||
getattr(b, 'lineno', 0)))
|
|
||||||
for obj in objs:
|
for obj in objs:
|
||||||
if isinstance(obj, Class):
|
if isinstance(obj, Class):
|
||||||
print("class", obj.name, obj.super, obj.lineno)
|
print("class", obj.name, obj.super, obj.lineno)
|
||||||
|
|
|
@ -797,10 +797,7 @@ class HTMLDoc(Doc):
|
||||||
tag += ':<br>\n'
|
tag += ':<br>\n'
|
||||||
|
|
||||||
# Sort attrs by name.
|
# Sort attrs by name.
|
||||||
try:
|
|
||||||
attrs.sort(key=lambda t: t[0])
|
attrs.sort(key=lambda t: t[0])
|
||||||
except TypeError:
|
|
||||||
attrs.sort(lambda t1, t2: cmp(t1[0], t2[0])) # 2.3 compat
|
|
||||||
|
|
||||||
# Pump out the attrs, segregated by kind.
|
# Pump out the attrs, segregated by kind.
|
||||||
attrs = spill('Methods %s' % tag, attrs,
|
attrs = spill('Methods %s' % tag, attrs,
|
||||||
|
|
|
@ -2016,7 +2016,7 @@ class TarFile(object):
|
||||||
self.extract(tarinfo, path)
|
self.extract(tarinfo, path)
|
||||||
|
|
||||||
# Reverse sort directories.
|
# Reverse sort directories.
|
||||||
directories.sort(lambda a, b: cmp(a.name, b.name))
|
directories.sort(key=lambda a: a.name)
|
||||||
directories.reverse()
|
directories.reverse()
|
||||||
|
|
||||||
# Set correct owner, mtime and filemode on directories.
|
# Set correct owner, mtime and filemode on directories.
|
||||||
|
|
|
@ -504,6 +504,15 @@ class FunctionTestCase(TestCase):
|
||||||
# Locating and loading tests
|
# Locating and loading tests
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
|
def CmpToKey(mycmp):
|
||||||
|
'Convert a cmp= function into a key= function'
|
||||||
|
class K(object):
|
||||||
|
def __init__(self, obj, *args):
|
||||||
|
self.obj = obj
|
||||||
|
def __lt__(self, other):
|
||||||
|
return mycmp(self.obj, other.obj) == -1
|
||||||
|
return K
|
||||||
|
|
||||||
class TestLoader:
|
class TestLoader:
|
||||||
"""This class is responsible for loading tests according to various
|
"""This class is responsible for loading tests according to various
|
||||||
criteria and returning them wrapped in a TestSuite
|
criteria and returning them wrapped in a TestSuite
|
||||||
|
@ -598,7 +607,7 @@ class TestLoader:
|
||||||
and hasattr(getattr(testCaseClass, attrname), '__call__')
|
and hasattr(getattr(testCaseClass, attrname), '__call__')
|
||||||
testFnNames = list(filter(isTestMethod, dir(testCaseClass)))
|
testFnNames = list(filter(isTestMethod, dir(testCaseClass)))
|
||||||
if self.sortTestMethodsUsing:
|
if self.sortTestMethodsUsing:
|
||||||
testFnNames.sort(self.sortTestMethodsUsing)
|
testFnNames.sort(key=CmpToKey(self.sortTestMethodsUsing))
|
||||||
return testFnNames
|
return testFnNames
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -122,10 +122,7 @@ class ColorDB:
|
||||||
self.__allnames = []
|
self.__allnames = []
|
||||||
for name, aliases in self.__byrgb.values():
|
for name, aliases in self.__byrgb.values():
|
||||||
self.__allnames.append(name)
|
self.__allnames.append(name)
|
||||||
# sort irregardless of case
|
self.__allnames.sort(key=unicode.lower)
|
||||||
def nocase_cmp(n1, n2):
|
|
||||||
return cmp(n1.lower(), n2.lower())
|
|
||||||
self.__allnames.sort(nocase_cmp)
|
|
||||||
return self.__allnames
|
return self.__allnames
|
||||||
|
|
||||||
def aliases_of(self, red, green, blue):
|
def aliases_of(self, red, green, blue):
|
||||||
|
|
|
@ -78,7 +78,7 @@ def processdir(dir, listnames):
|
||||||
fn = os.path.join(dir, name)
|
fn = os.path.join(dir, name)
|
||||||
if os.path.normcase(fn).endswith(".py") or os.path.isdir(fn):
|
if os.path.normcase(fn).endswith(".py") or os.path.isdir(fn):
|
||||||
files.append(fn)
|
files.append(fn)
|
||||||
files.sort(lambda a, b: cmp(os.path.normcase(a), os.path.normcase(b)))
|
files.sort(key=os.path.normcase)
|
||||||
exit = None
|
exit = None
|
||||||
for fn in files:
|
for fn in files:
|
||||||
x = process(fn, listnames)
|
x = process(fn, listnames)
|
||||||
|
|
|
@ -441,6 +441,15 @@ def makeunicodetype(unicode, trace):
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
# unicode name database
|
# unicode name database
|
||||||
|
|
||||||
|
def CmpToKey(mycmp):
|
||||||
|
'Convert a cmp= function into a key= function'
|
||||||
|
class K(object):
|
||||||
|
def __init__(self, obj, *args):
|
||||||
|
self.obj = obj
|
||||||
|
def __lt__(self, other):
|
||||||
|
return mycmp(self.obj, other.obj) == -1
|
||||||
|
return K
|
||||||
|
|
||||||
def makeunicodename(unicode, trace):
|
def makeunicodename(unicode, trace):
|
||||||
|
|
||||||
FILE = "Modules/unicodename_db.h"
|
FILE = "Modules/unicodename_db.h"
|
||||||
|
@ -490,7 +499,7 @@ def makeunicodename(unicode, trace):
|
||||||
if r:
|
if r:
|
||||||
return r
|
return r
|
||||||
return cmp(aword, bword)
|
return cmp(aword, bword)
|
||||||
wordlist.sort(cmpwords)
|
wordlist.sort(key=CmpToKey(cmpwords))
|
||||||
|
|
||||||
# figure out how many phrasebook escapes we need
|
# figure out how many phrasebook escapes we need
|
||||||
escapes = 0
|
escapes = 0
|
||||||
|
@ -514,7 +523,7 @@ def makeunicodename(unicode, trace):
|
||||||
# length (to maximize overlap)
|
# length (to maximize overlap)
|
||||||
|
|
||||||
wordlist, wordtail = wordlist[:short], wordlist[short:]
|
wordlist, wordtail = wordlist[:short], wordlist[short:]
|
||||||
wordtail.sort(lambda a, b: len(b[0])-len(a[0]))
|
wordtail.sort(key=lambda a: a[0], reverse=True)
|
||||||
wordlist.extend(wordtail)
|
wordlist.extend(wordtail)
|
||||||
|
|
||||||
# generate lexicon from words
|
# generate lexicon from words
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue