Wenn ich richtig verstehe, Sie wollen entweder die Anruffunktionen in Chargen (alle möglichen Argumente für die erste Funktion, dann werden alle möglichen Argumente für die zweite Funktion in ersten Fall usw.) und Argumente in Chargen in zweiten Fall (also alle Funktion für die erste arg, dann werden alle Funktionen für die zweite arg etc.)
würde ich sagen Sie es explizit zu tun haben:
def foo(i):
print("foo", i)
def bar(i):
print("bar", i)
def stretch(seq, n):
"""stretch([1,2,3], 3) -> [1,1,1,2,2,2,3,3,3], lazy generator"""
for o in seq:
for _ in range(n):
yield o
def run(args, functions, mode):
if mode:
my_args = list(stretch(args, len(functions)))
my_functions = functions * len(args)
else:
my_args = args * len(functions)
my_functions = list(stretch(functions, len(args)))
for f, a in zip(my_functions, my_args):
f(a)
Invokation:
run(list(range(5)), [foo, bar], 0)
Ausgang:
foo 0
foo 1
foo 2
foo 3
foo 4
bar 0
bar 1
bar 2
bar 3
bar 4
Invocation:
run(list(range(5)), [foo, bar], 1)
Ausgang:
foo 0
bar 0
foo 1
bar 1
foo 2
bar 2
foo 3
bar 3
foo 4
bar 4
Hier ist, was wir haben, ist getan, dass wir Paare für (callable, argument_to_callable)
erstellt, wenn bestimmt, um durch Ihre Anforderung. Also im Wesentlichen haben Sie einen Booleschen, der "eine Art" für Sie eine Schleife dupliziert hat.
Code ist irgendwie hässlich, ich frage mich, ob jemand mit einer besseren Lösung kommt.
Nein, es gibt keine Präprozessor in Python, so dass Sie keine Äquivalent von Prä-Prozessor-Stil-Richtlinien verwenden. Kannst du mehr Details oder konkreteres Beispiel teilen? Im Moment riecht es nach [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - sagen Sie uns was Sie tun möchten, nicht _how_ Sie wollen es tun . –
@ ŁukaszRogalski Danke. Das obige ist genau das, was ich versuche zu tun. Ich suche nach einer Möglichkeit, die Schleife zu unterbrechen, ohne die Argumente zu 'foo' und' bar' zu ändern oder die Körper dieser Funktionen zu ändern. – JRR
Können Sie erklären, warum Sie dies ein wenig mehr tun möchten, vielleicht ein wenig mehr Kontext hinzufügen und was die Funktionen tun? –