code: def parse_args(string):
      
      import ast
      is_quoted = False
      result_parts = []
      current_str = ""
      while len(string) > 0:
          if string[0] == "\"":
              is_quoted = not is_quoted
              current_str += string[0]
          elif string[0].isspace():
              if is_quoted:
                  current_str += string[0]
              else:
                  result_parts.append(current_str)
                  current_str = ""
              # end if
          else:
              current_str += string[0]
          # end if
          string = string[1:]
      # end while
      if current_str:  # last part of the array
          result_parts.append(current_str)
      # end if
      for i in range(len(result_parts)):
          # Will try for each element if it is something pythonic. Parsed type will replace original list element.
          try:
              part = ast.literal_eval(result_parts[i])
              result_parts[i] = part  # write it back.
          except ValueError:
              # could not parse -> is string
              pass  # because already is str.
          # end try
      # end for
      return result_parts
docs: `"yada hoa" yupi yeah 12 "" None "None"` -> `["yada hoa", "yupi", "yeah", 12, "", None, "None"]`
      :param str:
      :return: