import ctypes class MyUnion(ctypes.Union): _fields_ = [('d', ctypes.c_double), ('i', ctypes.c_int64)] \ + [("x{}".format(i), ctypes.c_double) for i in range(2,13)] lib = ctypes.CDLL('./libfoo.so') foo = lib.foo foo.argtypes = [MyUnion] foo.restype = None ind = MyUnion() ind.d = 3.1415 foo(ind) ini = MyUnion() ini.i = 42 foo(ini)