I fixed the reply-to this time, looks like you're still getting messed up by Google Groups.
On 16 January 2018 at 16:25, smarie <sylvain.ma...@schneider-electric.com> wrote: > Let's consider this example where users want to define on-the-fly one of the > validation functions, and combine it with another with a 'or': > > assert_valid('surface', surf, or_(lambda x: (x >= 0) & (x < 10000), > is_foo_compliant), help_msg="surface should be 0=<x<10000 or foo compliant") > > How ugly for something so simple ! I tried to make it slightly more compact > by developping a mini lambda syntax but it obviously makes it slower. Why do you do this? What's the requirement for delaying evaluation of the condition? A validate statement in Python wouldn't be any better able to do that, so it'd be just as ugly with a statement. There's no reason I can see why I'd ever need delayed evaluation, so what's wrong with just assert_valid(0 <= surf < 10000 and is_foo_compliant(surf), help_msg="surface should be 0=<x<10000 or foo compliant") > There are three reasons why having a 'validate' statement would improve > this: > > * no more parenthesis: more elegant and readable > * inline use of python (1): no more use of lambda or mini_lambda, no > performance overhead > * inline use of python (2): composition would not require custom function > composition operators such as 'or_' (above) or mini-lambda composition > anymore, it could be built-in in any language element used after <validate> > > resulting in > > validate (surf >= 0) & (surf < 10000) or is_foo_compliant(surf), > "surface should be 0=<x<10000 or foo compliant" So how will that work any differently than the function version I gave above? In terms of the language syntax, it would just be validate EXPR, EXPR and the first EXPR will be evaluated as a boolean, and if it's false an exception will be raised with the second expression as the message. There's no delayed evaluation involved, so a function would work exactly the same. > > (I removed the variable name alias 'surface' since I don't know if it should > remain or not) > > Elegant, isn't it ? No more so than my function version, but yes far more so than yours... Paul _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/