S
Steven D'Aprano
I'm writing a factory function that needs to use keywords in the produced
function, not the factory. Here's a toy example:
def factory(flag):
def foo(obj, arg):
if flag:
# use the spam keyword to method()
return obj.method(spam=arg)
else:
# use the ham keyword
return obj.method(ham=arg)
return foo
Problem: the test of which keyword to use is done every time the produced
function is called, instead of once, in the factory.
I thought of doing this:
def factory(flag):
if flag: kw = 'spam'
else: kw = 'ham'
def foo(obj, arg):
kwargs = dict([(kw, arg)])
return obj.method(**kwargs)
return foo
Is this the best way of doing this? Are there any alternative methods
that aren't risky, slow or obfuscated?
Before anyone suggests changing the flag argument to the factory to the
name of the keyword, this is only a toy example, and doing so in my
actual code isn't practical.
function, not the factory. Here's a toy example:
def factory(flag):
def foo(obj, arg):
if flag:
# use the spam keyword to method()
return obj.method(spam=arg)
else:
# use the ham keyword
return obj.method(ham=arg)
return foo
Problem: the test of which keyword to use is done every time the produced
function is called, instead of once, in the factory.
I thought of doing this:
def factory(flag):
if flag: kw = 'spam'
else: kw = 'ham'
def foo(obj, arg):
kwargs = dict([(kw, arg)])
return obj.method(**kwargs)
return foo
Is this the best way of doing this? Are there any alternative methods
that aren't risky, slow or obfuscated?
Before anyone suggests changing the flag argument to the factory to the
name of the keyword, this is only a toy example, and doing so in my
actual code isn't practical.