code: def gen_cartesian_product(*args):
      
      if not args:
          return []
      elif len(args) == 1:
          return args[0]
  
      product_list = []
      for product_item_tuple in itertools.product(*args):
          product_item_dict = {}
          for item in product_item_tuple:
              product_item_dict.update(item)
  
          product_list.append(product_item_dict)
  
      return product_list
docs: generate cartesian product for lists
  
      Args:
          args (list of list): lists to be generated with cartesian product
  
      Returns:
          list: cartesian product in list
  
      Examples:
  
          >>> arg1 = [{"a": 1}, {"a": 2}]
          >>> arg2 = [{"x": 111, "y": 112}, {"x": 121, "y": 122}]
          >>> args = [arg1, arg2]
          >>> gen_cartesian_product(*args)
          >>> # same as below
          >>> gen_cartesian_product(arg1, arg2)
              [
                  {'a': 1, 'x': 111, 'y': 112},
                  {'a': 1, 'x': 121, 'y': 122},
                  {'a': 2, 'x': 111, 'y': 112},
                  {'a': 2, 'x': 121, 'y': 122}
              ]