code: def putkeyword(self, keyword, value, makesubrecord=False):
          
          val = value
          if isinstance(val, table):
              val = _add_prefix(val.name())
          if isinstance(keyword, str):
              return self._putkeyword('', keyword, -1, makesubrecord, val)
          else:
              return self._putkeyword('', '', keyword, makesubrecord, val)
docs: Put the value of a table keyword.
  
          The value of a keyword can be a:
  
          - scalar which can be given a normal python scalar or numpy scalar.
          - an array which can be given as a numpy array. A 1-dimensional array
            can also be given as a sequence (tuple or list).
          - a reference to a table which can be given as a table object or as a
            string containing its name prefixed by 'Table :'.
          - a struct which can be given as a dict. A struct is fully nestable,
            thus each field in the dict can be one of the values described here.
            The only exception is that a table value can only be given by the
            string.
  
          If the keyword already exists, the type of the new value should match
          the existing one (e.g. a scalar cannot be replaced by an array).
  
          Similar to method :func:`getkeyword` a keyword name can be given
          consisting of multiple parts separated by dots. This represents nested
          structs, thus puts the value into a field in a struct (in a struct,
          etc.).
          If `makesubrecord=True` structs will be created for the keyword name
          parts that do not exist.
  
          Instead of a keyword name an index can be given which returns the value
          of the i-th keyword.