Copyright (C) 2000-2012 |
GNU Info (python2.1-ref.info)Boolean operationsBoolean operations ================== Boolean operations have the lowest priority of all Python operations: expression: or_test | lambda_form or_test: and_test | or_test "or" and_test and_test: not_test | and_test "and" not_test not_test: comparison | "not" not_test lambda_form: "lambda" [parameter_list]: expression In the context of Boolean operations, and also when expressions are used by control flow statements, the following values are interpreted as false: `None', numeric zero of all types, empty sequences (strings, tuples and lists), and empty mappings (dictionaries). All other values are interpreted as true. The operator `not' yields `1' if its argument is false, `0' otherwise. The expression `X and Y' first evaluates X; if X is false, its value is returned; otherwise, Y is evaluated and the resulting value is returned. The expression `X or Y' first evaluates X; if X is true, its value is returned; otherwise, Y is evaluated and the resulting value is returned. (Note that neither `and' nor `or' restrict the value and type they return to `0' and `1', but rather return the last evaluated argument. This is sometimes useful, e.g., if `s' is a string that should be replaced by a default value if it is empty, the expression `s or 'foo'' yields the desired value. Because `not' has to invent a value anyway, it does not bother to return a value of the same type as its argument, so e.g., `not 'foo'' yields `0', not `'''.) Lambda forms (lambda expressions) have the same syntactic position as expressions. They are a shorthand to create anonymous functions; the expression `lambda ARGUMENTS: EXPRESSION' yields a function object that behaves virtually identical to one defined with def name(arguments): return expression See section Note: Function definitions for the syntax of parameter lists. Note that functions created with lambda forms cannot contain statements. *Programmer's note:* Prior to Python 2.1, a lambda form defined inside a function has no access to names defined in the function's namespace. This is because Python had only two scopes: local and global. A common work-around was to use default argument values to pass selected variables into the lambda's namespace, e.g.: def make_incrementor(increment): return lambda x, n=increment: x+n Python 2.1 introduced nested scopes as an optional feature, and this work-around has not been necessary when the feature is enabled. The use of nested scopes is enabled by the statement `from __future__ import nested_scopes'; future versions of Python will enable nested scopes by default. This version works starting with Python 2.1: from __future__ import nested_scopes def make_incrementor(increment): return lambda x: x+increment automatically generated by info2www version 1.2.2.9 |