I've been working in the python addin environment for the past few months. One of the projects I've undertaken is a series of QA QC routines that run independent of each other. My first stab was to run each of the routines under the onClick function of one button on a toolbar. In doing so, I'm able to import various python modules needed once, right up at the top of the script where arcpy and pythonaddins are, before any button classes are defined.
However, after working on another project for a few weeks, and returning to the QA QC project, I found the code to be difficult to read and/or maintain so I decided to define each of the processes as their own function, and simply call them from the button onClick function. Many of these routines / functions use modules like string, and from string, punctuation and ascii_letters. With the the more modular approach I have found that each of 'extra' python modules need to be imported with each function. That is, I import string a half a dozen times in each