<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def summary(self, recurse=False):
 """Print a summary of the table. It prints the number of columns and rows, column names, and table and column keywords. If `recurse=True` it also prints the summary of all subtables, i.e. tables referenced by table keywords. """

        six.print_('Table summary:', self.name())
        six.print_('Shape:', self.ncols(), 'columns by', self.nrows(), 'rows')
        six.print_('Info:', self.info())
        tkeys = self.getkeywords()
        if (len(tkeys) > 0):
            six.print_('Table keywords:', tkeys)
        columns = self.colnames()
        if (len(columns) > 0):
            six.print_('Columns:', columns)
            for column in columns:
                ckeys = self.getcolkeywords(column)
                if (len(ckeys) > 0):
                    six.print_(column, 'keywords:', ckeys)
        if (recurse):
            for key, value in tkeys.items():
                tabname = _remove_prefix(value)
                six.print_('Summarizing subtable:', tabname)
                lt = table(tabname)
                if (not lt.summary(recurse)):
                    break
        return True