-
Notifications
You must be signed in to change notification settings - Fork 240
Python Dos and Don'ts
-
No need for threading.Event to signal boolean conditions between threads. Use threading.Event only if you need to efficiently block on the event to occur. Otherwise use a simple bool variable. The GIL takes care of the rest.
-
Don't use
format()
or%
to format log messages. The logger'sdebug()
,info()
,warn()
, etc. methods are all variadic, and the extra arguments will be interpolated into the log message. IOW,logger.info('Hello, %s' % world)
is equivalent to
logger.info('Hello, %s', world)
just less efficient if the log level set above info. String interpolation isn't exactly cheap so its desirable to only do it if the log message is actually delivered.
-
Don't waste pixels, use single-quoted strings by default.
-
No need to call
threading.Queue.task_done()
unless you intend to calljoin()
on that queue. Note thatthreading.Queue.join()
is different fromthreading.Thread.join()
. -
Avoid backslash for line continuations. Python can infer a line continuation if it occurs within a balanced construct like parentheses, braces and brackets. I sometimes even introduce an otherwise redundant pair of parens if that lets me avoid backslashes. So don't
log( "Bla, bla, bla %s %s %s", foo, \ bar, \ ding )
but do
log( "Bla, bla, bla %s %s %s", foo, bar, ding )
And don't
from germany import bmw, \ mercedes, \ audi
but do
from germany import (bmw, mercedes, audi)