On 08/16/2011 01:46 PM, Peter Otten wrote:
Jeff Peters wrote:
Hi;
I am trying to run a function inside a continuing loop, but do not seem
to be able to pass any parameters (arguments ) when I do so.
I have placed working and non-working code , with output below.
## This works:
def loop(fn ):
for i in range(5):
fn( )
def this_function(a=" i am not a string"):
print( a )
loop(this_function)
## with output:
>>>
i am not a string
i am not a string
i am not a string
i am not a string
i am not a string
>>>
## But , this does not :
def loop(fn ):
for i in range(5):
fn( )
def this_function(a=" i am not a string"):
print( a )
loop(this_function("I am a string") ) ## note the only change is here
You are calling this_function() and then pass the result of the function
call to your other function loop().
Instead you need another function that builds a function that calls
this_function() with the desired argument:
def loop(f):
... for i in range(5):
... f()
...
def this_function(a):
... print(a)
...
def make_function(f, arg):
... def g():
... f(arg)
... return g
...
loop(make_function(this_function, "foo"))
foo
foo
foo
foo
foo
loop(make_function(this_function, "bar"))
bar
bar
bar
bar
bar
Of course you could also change loop() to pass on arbitrary arguments:
def loop(f, *args, **kw):
... for i in range(3):
... f(*args, **kw)
...
loop(print, 1, 2)
1 2
1 2
1 2
loop(print, 1, 2, sep="<-->")
1<-->2
1<-->2
1<-->2
Because building a function that just calls another function with some
predefined arguments is a common need the standard library has
functools.partial():
from functools import partial
print42 = partial(print, 42)
print42()
42
loop(print42)
42
42
42
Another variant is a lambda function with a default argument:
loop(lambda a="whatever": print(a))
whatever
whatever
whatever
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor
Thanks, that is what I needed.
not splitting the function name and argument list was
my problem. and the function creator idea really appeals
thanks again - jeff
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor