[Python-checkins] cpython (3.2): Remove duplicates of cmp_to_key (#12542, reviewed by Raymond Hettinger)

eric.araujo python-checkins at python.org
Fri Jul 29 14:35:16 CEST 2011


http://hg.python.org/cpython/rev/fefb7d355361
changeset: 71550:fefb7d355361
branch: 3.2
parent: 71500:d11a1a373f58
user: Éric Araujo <merwok at netwok.org>
date: Tue Jul 26 15:13:47 2011 +0200
summary:
 Remove duplicates of cmp_to_key (#12542, reviewed by Raymond Hettinger)
files:
 Lib/test/list_tests.py | 16 +++++-----------
 Lib/test/test_sort.py | 23 ++++++++---------------
 2 files changed, 13 insertions(+), 26 deletions(-)
diff --git a/Lib/test/list_tests.py b/Lib/test/list_tests.py
--- a/Lib/test/list_tests.py
+++ b/Lib/test/list_tests.py
@@ -4,17 +4,10 @@
 
 import sys
 import os
+from functools import cmp_to_key
 
 from test import support, seq_tests
 
-def CmpToKey(mycmp):
- 'Convert a cmp= function into a key= function'
- class K(object):
- def __init__(self, obj):
- self.obj = obj
- def __lt__(self, other):
- return mycmp(self.obj, other.obj) == -1
- return K
 
 class CommonTest(seq_tests.CommonTest):
 
@@ -443,7 +436,7 @@
 return 1
 else: # a > b
 return -1
- u.sort(key=CmpToKey(revcmp))
+ u.sort(key=cmp_to_key(revcmp))
 self.assertEqual(u, self.type2test([2,1,0,-1,-2]))
 
 # The following dumps core in unpatched Python 1.5:
@@ -456,7 +449,7 @@
 else: # xmod > ymod
 return 1
 z = self.type2test(range(12))
- z.sort(key=CmpToKey(myComparison))
+ z.sort(key=cmp_to_key(myComparison))
 
 self.assertRaises(TypeError, z.sort, 2)
 
@@ -468,7 +461,8 @@
 return -1
 else: # x > y
 return 1
- self.assertRaises(ValueError, z.sort, key=CmpToKey(selfmodifyingComparison))
+ self.assertRaises(ValueError, z.sort,
+ key=cmp_to_key(selfmodifyingComparison))
 
 self.assertRaises(TypeError, z.sort, 42, 42, 42, 42)
 
diff --git a/Lib/test/test_sort.py b/Lib/test/test_sort.py
--- a/Lib/test/test_sort.py
+++ b/Lib/test/test_sort.py
@@ -2,18 +2,11 @@
 import random
 import sys
 import unittest
+from functools import cmp_to_key
 
 verbose = support.verbose
 nerrors = 0
 
-def CmpToKey(mycmp):
- 'Convert a cmp= function into a key= function'
- class K(object):
- def __init__(self, obj):
- self.obj = obj
- def __lt__(self, other):
- return mycmp(self.obj, other.obj) == -1
- return K
 
 def check(tag, expected, raw, compare=None):
 global nerrors
@@ -23,7 +16,7 @@
 
 orig = raw[:] # save input in case of error
 if compare:
- raw.sort(key=CmpToKey(compare))
+ raw.sort(key=cmp_to_key(compare))
 else:
 raw.sort()
 
@@ -108,7 +101,7 @@
 print(" Checking against an insane comparison function.")
 print(" If the implementation isn't careful, this may segfault.")
 s = x[:]
- s.sort(key=CmpToKey(lambda a, b: int(random.random() * 3) - 1))
+ s.sort(key=cmp_to_key(lambda a, b: int(random.random() * 3) - 1))
 check("an insane function left some permutation", x, s)
 
 if len(x) >= 2:
@@ -165,12 +158,12 @@
 L.pop()
 return (x > y) - (x < y)
 L = [1,2]
- self.assertRaises(ValueError, L.sort, key=CmpToKey(mutating_cmp))
+ self.assertRaises(ValueError, L.sort, key=cmp_to_key(mutating_cmp))
 def mutating_cmp(x, y):
 L.append(3)
 del L[:]
 return (x > y) - (x < y)
- self.assertRaises(ValueError, L.sort, key=CmpToKey(mutating_cmp))
+ self.assertRaises(ValueError, L.sort, key=cmp_to_key(mutating_cmp))
 memorywaster = [memorywaster]
 
 #==============================================================================
@@ -185,7 +178,7 @@
 def my_cmp(x, y):
 xlower, ylower = x.lower(), y.lower()
 return (xlower > ylower) - (xlower < ylower)
- copy.sort(key=CmpToKey(my_cmp))
+ copy.sort(key=cmp_to_key(my_cmp))
 
 def test_baddecorator(self):
 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
@@ -261,8 +254,8 @@
 def my_cmp_reversed(x, y):
 x0, y0 = x[0], y[0]
 return (y0 > x0) - (y0 < x0)
- data.sort(key=CmpToKey(my_cmp), reverse=True)
- copy1.sort(key=CmpToKey(my_cmp_reversed))
+ data.sort(key=cmp_to_key(my_cmp), reverse=True)
+ copy1.sort(key=cmp_to_key(my_cmp_reversed))
 self.assertEqual(data, copy1)
 copy2.sort(key=lambda x: x[0], reverse=True)
 self.assertEqual(data, copy2)
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /