Kaydet (Commit) a137e1f1 authored tarafından Raymond Hettinger's avatar Raymond Hettinger

In Py3.0, the recipes can use keyword-only arguments instead of using the **kwds trick.

üst dd1150e3
...@@ -291,9 +291,8 @@ loops that truncate the stream. ...@@ -291,9 +291,8 @@ loops that truncate the stream.
iterables are of uneven length, missing values are filled-in with *fillvalue*. iterables are of uneven length, missing values are filled-in with *fillvalue*.
Iteration continues until the longest iterable is exhausted. Equivalent to:: Iteration continues until the longest iterable is exhausted. Equivalent to::
def zip_longest(*args, **kwds): def zip_longest(*args, fillvalue=None):
# zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D- # zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
fillvalue = kwds.get('fillvalue')
def sentinel(counter = ([fillvalue]*(len(args)-1)).pop): def sentinel(counter = ([fillvalue]*(len(args)-1)).pop):
yield counter() # yields the fillvalue, or raises IndexError yield counter() # yields the fillvalue, or raises IndexError
fillers = repeat(fillvalue) fillers = repeat(fillvalue)
...@@ -384,10 +383,10 @@ loops that truncate the stream. ...@@ -384,10 +383,10 @@ loops that truncate the stream.
This function is equivalent to the following code, except that the This function is equivalent to the following code, except that the
actual implementation does not build up intermediate results in memory:: actual implementation does not build up intermediate results in memory::
def product(*args, **kwds): def product(*args, repeat=1):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1) pools = map(tuple, args) * repeat
result = [[]] result = [[]]
for pool in pools: for pool in pools:
result = [x+[y] for x in result for y in pool] result = [x+[y] for x in result for y in pool]
...@@ -596,8 +595,7 @@ which incur interpreter overhead. :: ...@@ -596,8 +595,7 @@ which incur interpreter overhead. ::
def grouper(n, iterable, fillvalue=None): def grouper(n, iterable, fillvalue=None):
"grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')" "grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
args = [iter(iterable)] * n args = [iter(iterable)] * n
kwds = dict(fillvalue=fillvalue) return zip_longest(*args, fillvalue=fillvalue)
return zip_longest(*args, **kwds)
def roundrobin(*iterables): def roundrobin(*iterables):
"roundrobin('abc', 'd', 'ef') --> 'a', 'd', 'e', 'b', 'f', 'c'" "roundrobin('abc', 'd', 'ef') --> 'a', 'd', 'e', 'b', 'f', 'c'"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment