On 27Mar2015 21:02, Manuel Graune <[email protected]> wrote:
Cameron Simpson <[email protected]> writes:This passes the local variables inside test1() to "condition" as a single parameter. Now, I grant that vars['i'] is a miracle of tediousness. So consider this elaboration: from collections import namedtuple condition_test = lambda vars: vars.i + vars.j > 4 def test1(a, b, condition): for i, j in zip(a,b): c = i + j vars = locals() varnames = list(vars.keys()) varstupletype = namedtuple("locals", varnames) varstuple = varstupletype(*[ vars[k] for k in varnames ]) if condition(varstuple): print("Foo") Here, the condition_test function/lambda uses "vars.i" and "vars.j", which i think you'll agree is easier to read and write. The price is the construction of a "namedtuple" to hold the variable name values. See: https://docs.python.org/3/library/collections.html#collections.namedtupleThis is probably getting off topic,
I think it is on topic.
but is there any relevant difference or benefit to using namedtuple instead of something like types.SimpleNamespace? https://docs.python.org/3/library/types.html#additional-utility-classes-and-functions
Probably not. SimpleNamespace is much easier to construct; I hadn't thought of it. As the doc remarks, a namedtuple is probably better for fixed records (eg mapping out rows of a CSV file) because it will prevent you using the wrong name. But for a comparison function SimpleNamespace is probably better.
Cheers, Cameron Simpson <[email protected]> The Horn of Vengeance: When he pushes the horn button, the device produces the sound of fingernails scraping on a blackboard, amplified beyond pain threshold. If that doesn't work, the horn then plays the Pina Colada song. -- https://mail.python.org/mailman/listinfo/python-list
