Hello Pascal,
Pascal wrote:
Hello,
I've a function like this:
def myfunction(data, verbose = False):
dothis...
if verbose: print 'I do this'
dothisother
if verbose: print 'I do this other'
...
How can I do to exclude eachtime the `if verbose` statement?
I tried `print verbose and 'I do this'` but it's printing `False`.
So I tried with `verbose = None` in the definition, but it's printing None!
I'm not sure exactly what you are doing because I can't
duplicate your results.
But I am guessing that what you are doing is passing a
string "False" instead of the boolean constant False.
The constant False is only defined in Python 2.2 and
higher.
You can put something like this at the beginning of
your program to make sure that False and True are
defined no matter what version of Python you are using:
try:
if False:
pass
except:
False = 0
True = not False
Notice the difference between a string and a boolean value:
print False; print "False"
0
False type(False); type("False")
<type 'int'>
<type 'str'>
Likewise None is not the same as "None".
The way I would handle verbose printing in functions is
to factor out the "verbosity" from the function logic:
def verboseprint(s, verbose):
if verbose: print s
def myfunction(arg, verbose=False):
dothis
verboseprint("Do this", verbose)
dothat
verboseprint("Do that", verbose)
That way, if there is a bug in your handling of verbose
printing, you only need to fix it in one place. If you
decide to change verbose printing to (say) using a log
file, you only need to change one place.
The statement:
print verbose and "Do this"
will not work. If verbose is True, then the term
(verbose and "Do this") will evaluate to "Do this", and
Python will print what you expect, namely "Do this".
But if verbose is False, then the term (verbose and "Do
this") will evaluate to False, and Python will then
print False, which is not what you want.
--
Steven D'Aprano