code: def print_evaluation(period=1, show_stdv=True):
      
      def callback(env):
          """internal function"""
          if env.rank != 0 or (not env.evaluation_result_list) or period is False or period == 0:
              return
          i = env.iteration
          if i % period == 0 or i + 1 == env.begin_iteration or i + 1 == env.end_iteration:
              msg = '\t'.join([_fmt_metric(x, show_stdv) for x in env.evaluation_result_list])
              rabit.tracker_print('[%d]\t%s\n' % (i, msg))
      return callback
docs: Create a callback that print evaluation result.
  
      We print the evaluation results every **period** iterations
      and on the first and the last iterations.
  
      Parameters
      ----------
      period : int
          The period to log the evaluation results
  
      show_stdv : bool, optional
           Whether show stdv if provided
  
      Returns
      -------
      callback : function
          A callback that print evaluation every period iterations.