parent
2f47fb0021
commit
378a1d77d9
|
@ -1040,7 +1040,7 @@ If you use :func:`operator.add` with :func:`functools.reduce`, you'll add up all
|
||||||
elements of the iterable. This case is so common that there's a special
|
elements of the iterable. This case is so common that there's a special
|
||||||
built-in called :func:`sum` to compute it:
|
built-in called :func:`sum` to compute it:
|
||||||
|
|
||||||
>>> import functools
|
>>> import functools, operator
|
||||||
>>> functools.reduce(operator.add, [1,2,3,4], 0)
|
>>> functools.reduce(operator.add, [1,2,3,4], 0)
|
||||||
10
|
10
|
||||||
>>> sum([1,2,3,4])
|
>>> sum([1,2,3,4])
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
.. testsetup::
|
||||||
|
|
||||||
|
import ipaddress
|
||||||
|
|
||||||
.. _ipaddress-howto:
|
.. _ipaddress-howto:
|
||||||
|
|
||||||
***************************************
|
***************************************
|
||||||
|
@ -49,11 +53,6 @@ to use the :func:`ipaddress.ip_address` factory function, which automatically
|
||||||
determines whether to create an IPv4 or IPv6 address based on the passed in
|
determines whether to create an IPv4 or IPv6 address based on the passed in
|
||||||
value:
|
value:
|
||||||
|
|
||||||
.. testsetup::
|
|
||||||
>>> import ipaddress
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
>>> ipaddress.ip_address('192.0.2.1')
|
>>> ipaddress.ip_address('192.0.2.1')
|
||||||
IPv4Address('192.0.2.1')
|
IPv4Address('192.0.2.1')
|
||||||
>>> ipaddress.ip_address('2001:DB8::1')
|
>>> ipaddress.ip_address('2001:DB8::1')
|
||||||
|
|
|
@ -58,28 +58,28 @@ A common pattern is to sort complex objects using some of the object's indices
|
||||||
as keys. For example:
|
as keys. For example:
|
||||||
|
|
||||||
>>> student_tuples = [
|
>>> student_tuples = [
|
||||||
('john', 'A', 15),
|
... ('john', 'A', 15),
|
||||||
('jane', 'B', 12),
|
... ('jane', 'B', 12),
|
||||||
('dave', 'B', 10),
|
... ('dave', 'B', 10),
|
||||||
]
|
... ]
|
||||||
>>> sorted(student_tuples, key=lambda student: student[2]) # sort by age
|
>>> sorted(student_tuples, key=lambda student: student[2]) # sort by age
|
||||||
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
|
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
|
||||||
|
|
||||||
The same technique works for objects with named attributes. For example:
|
The same technique works for objects with named attributes. For example:
|
||||||
|
|
||||||
>>> class Student:
|
>>> class Student:
|
||||||
def __init__(self, name, grade, age):
|
... def __init__(self, name, grade, age):
|
||||||
self.name = name
|
... self.name = name
|
||||||
self.grade = grade
|
... self.grade = grade
|
||||||
self.age = age
|
... self.age = age
|
||||||
def __repr__(self):
|
... def __repr__(self):
|
||||||
return repr((self.name, self.grade, self.age))
|
... return repr((self.name, self.grade, self.age))
|
||||||
|
|
||||||
>>> student_objects = [
|
>>> student_objects = [
|
||||||
Student('john', 'A', 15),
|
... Student('john', 'A', 15),
|
||||||
Student('jane', 'B', 12),
|
... Student('jane', 'B', 12),
|
||||||
Student('dave', 'B', 10),
|
... Student('dave', 'B', 10),
|
||||||
]
|
... ]
|
||||||
>>> sorted(student_objects, key=lambda student: student.age) # sort by age
|
>>> sorted(student_objects, key=lambda student: student.age) # sort by age
|
||||||
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
|
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
|
||||||
|
|
||||||
|
@ -208,15 +208,15 @@ return a negative value for less-than, return zero if they are equal, or return
|
||||||
a positive value for greater-than. For example, we can do:
|
a positive value for greater-than. For example, we can do:
|
||||||
|
|
||||||
>>> def numeric_compare(x, y):
|
>>> def numeric_compare(x, y):
|
||||||
return x - y
|
... return x - y
|
||||||
>>> sorted([5, 2, 4, 1, 3], cmp=numeric_compare)
|
>>> sorted([5, 2, 4, 1, 3], cmp=numeric_compare) # doctest: +SKIP
|
||||||
[1, 2, 3, 4, 5]
|
[1, 2, 3, 4, 5]
|
||||||
|
|
||||||
Or you can reverse the order of comparison with:
|
Or you can reverse the order of comparison with:
|
||||||
|
|
||||||
>>> def reverse_numeric(x, y):
|
>>> def reverse_numeric(x, y):
|
||||||
return y - x
|
... return y - x
|
||||||
>>> sorted([5, 2, 4, 1, 3], cmp=reverse_numeric)
|
>>> sorted([5, 2, 4, 1, 3], cmp=reverse_numeric) # doctest: +SKIP
|
||||||
[5, 4, 3, 2, 1]
|
[5, 4, 3, 2, 1]
|
||||||
|
|
||||||
When porting code from Python 2.x to 3.x, the situation can arise when you have
|
When porting code from Python 2.x to 3.x, the situation can arise when you have
|
||||||
|
@ -244,6 +244,12 @@ function. The following wrapper makes that easy to do::
|
||||||
|
|
||||||
To convert to a key function, just wrap the old comparison function:
|
To convert to a key function, just wrap the old comparison function:
|
||||||
|
|
||||||
|
.. testsetup::
|
||||||
|
|
||||||
|
from functools import cmp_to_key
|
||||||
|
|
||||||
|
.. doctest::
|
||||||
|
|
||||||
>>> sorted([5, 2, 4, 1, 3], key=cmp_to_key(reverse_numeric))
|
>>> sorted([5, 2, 4, 1, 3], key=cmp_to_key(reverse_numeric))
|
||||||
[5, 4, 3, 2, 1]
|
[5, 4, 3, 2, 1]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue