Jedes Mal, wenn ich iter
mit 2 Argumenten zu sehen, muß ich meinen Kopf kratzt einen aufblick die Dokumentation, um genau herauszufinden, was vor sich geht. Ganz einfach, weil der, dass, würde ich wahrscheinlich meine eigene Rolle:
def call_forever(callback):
while True:
yield callback()
Oder, wie es in den Kommentaren von Jon Clements erklärt, könnten Sie die itertools.repeatfunc
Rezept verwenden, die Sie Argumente für die Funktion als auch passieren lässt :
import itertools as it
def repeatfunc(func, times=None, *args):
"""
Repeat calls to func with specified arguments.
Example: repeatfunc(random.random)
"""
if times is None:
return it.starmap(func, it.repeat(args))
return it.starmap(func, it.repeat(args, times))
Obwohl ich glaube, dass die Funktion Unterschrift def repeatfunc(func,times=None,*args)
ein wenig umständlich ist. Ich würde es vorziehen, ein Tupel als args passieren (es scheint, noch deutlicher zu mir, und „explizite ist besser als implizite“):
import itertools as it
def repeatfunc(func, args=(),times=None):
"""
Repeat calls to func with specified arguments.
Example: repeatfunc(random.random)
"""
if times is None:
return it.starmap(func, it.repeat(args))
return it.starmap(func, it.repeat(args, times))
, die es ermöglicht, wie genannt werden:
repeatfunc(func,(arg1,arg2,...,argN),times=4) #repeat 4 times
repeatfunc(func,(arg1,arg2,...)) #repeat infinitely
anstelle der Vanille-Version von itertools
:
repeatfunc(func,4,arg1,arg2,...) #repeat 4 times
repeatfunc(func,None,arg1,arg2,...) #repeat infinitely
Für die oben würden Sie 'os.urandom (100)' verwenden obwohl würden Sie nicht? –
@ JonClements: natürlich ist es nur ein Beispiel. –