def _areConstants(expressions):
    return all(_isConstant(expression) for expression in expressions)

def _isConstant(expression):
    return expression.isExpressionConstantRef() and not expression.isMutable()

?

When I tried to understand the OP's code, I had to mentally step through the code and assemble the meaning, whereas the above code requires no such work (it probably takes a bit longer per-line, but less time over-all).

If you're asking about whether pylint should complain about the OP's code, I think that it shouldn't -- in the semantics of for/else, return and break are similar and rewriting OP's code to suppress the warnings is not an improvement:

def _areConstants(expressions):
    for expression in expressions:
        if not expression.isExpressionConstantRef():
            break
        if expression.isMutable():
            break
    else:
        return True
    return False

(Caveat: none of this code has been tested)




On 12 January 2014 07:21, Ian Cordasco <graffatcolmingov@gmail.com> wrote:
Woops. Sorry for the confusion. I never end up using that particular
construct so I never get it right.

On Sun, Jan 12, 2014 at 9:18 AM, Carl Crowder <carl.crowder@gmail.com> wrote:
> Ian, it's the opposite - 'else' is only triggered if *no* break statement is
> encountered.
>
>
> On 12 January 2014 16:12, Ian Cordasco <graffatcolmingov@gmail.com> wrote:
>>
>> I don't see any mesage from pylint in your email, could you post it again?
>>
>> Regardless, I think what you're disagreeing with is the language
>> specification. The documentation specifies that the `else` is only
>> triggered on breaks:
>>
>> http://docs.python.org/2/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops
>>
>> On Sun, Jan 12, 2014 at 8:57 AM, Kay Hayen <kay.hayen@gmail.com> wrote:
>> >
>> > Hello,
>> >
>> > often I write code like this:
>> >
>> > def _areConstants(expressions):
>> >     for expression in expressions:
>> >         if not expression.isExpressionConstantRef():
>> >             return False
>> >
>> >         if expression.isMutable():
>> >             return False
>> >     else:
>> >         return True
>> >
>> > That is to search in an iterable, and return based on finding something,
>> > or
>> > returning in the alternative, I specifically prefer the "else:" branch
>> > over
>> > merely putting it after the "for" loop.
>> >
>> > This triggers the above message, which I consider flawed, because as
>> > soon as
>> > there is a "raise", or "return", that should be good enough as well.
>> > Basically any aborting statement, not only break.
>> >
>> > I wanted to hear your opinion on this, pylint bug, or only in my mind.
>> >
>> > Yours,
>> > Kay
>> > _______________________________________________
>> > code-quality mailing list
>> > code-quality@python.org
>> > https://mail.python.org/mailman/listinfo/code-quality
>> _______________________________________________
>> code-quality mailing list
>> code-quality@python.org
>> https://mail.python.org/mailman/listinfo/code-quality
>
>
_______________________________________________
code-quality mailing list
code-quality@python.org
https://mail.python.org/mailman/listinfo/code-quality