title: Python 3: Passing functions into *args
body: <p>I'm using the <code>_thread</code> module (because it better fits in my program) and I want to pass a function into the function I'm passing into the thread. But, it's possible to pass only <strong><em>tuples</em></strong> into the <code>_thread.start_new_thread()</code> function, however, function is not iterable!</p>
  
  <hr>
  
  <p>@Willem Van Onsem - here's the full code. Uses Pygame.</p>
  
  <pre><code>class PGMaster:
      """
      Properties:
      mainloopOn - exits program if False
  
      Functions:
      PGMaster.mainlooprunner()
          Repeatedly runs Main function (must be overrided).
      PgMaster.mainloop(subthread=False)
          Wrapper for mainlooprunner. Subthread - will it run under MainThread? No if True.
      """
  
      def winmode(self, dimensions, flags=0, caption='', depth=None):
          """
          Flags are:
          pygame.FULLSCREEN    create a fullscreen display
          pygame.DOUBLEBUF     recommended for HWSURFACE or OPENGL
          pygame.HWSURFACE     hardware accelerated, only in FULLSCREEN
          pygame.OPENGL        create an OpenGL-renderable display
          pygame.RESIZABLE     display window should be sizeable
          pygame.NOFRAME       display window will have no border or controls
          """
          if depth != None:
              screenx = self.screen = pygame.display.set_mode(dimensions, flags, depth)
          elif depth == None:
              screenx = self.screen = pygame.display.set_mode(dimensions, flags)
          pygame.display.set_caption(caption)
          return screenx
  
      def __init__(self, dimensions, flags=0, caption='', depth=None):
          self.winmode(dimensions, flags, caption, depth)
          self.mainloopOn = True
  
  
      def mainlooprunner(self, function):
          func = function
          while self.mainloopOn:
              func()
  
      def mainlooprunnerx(self, *function):
          func = function[0]
          while self.mainloopOn:
              func()
  
      def mainloop(self, func, subthread=False):
          if subthread:
              functuple = tuple(func)
              _thread.start_new_thread(self.mainlooprunnerx, functuple)
          elif not subthread:
              self.mainlooprunner(func)
      . . .
  
  if __name__ == '__main__':
      root = PGMaster([1600, 900], pygame.DOUBLEBUF | pygame.RESIZABLE)
      # vvv Real codes vvv
      print(pygame.FULLSCREEN)
      print(pygame.DOUBLEBUF)
      print(pygame.HWSURFACE)
      print(pygame.OPENGL)
      print(pygame.RESIZABLE)
      print(pygame.NOFRAME)
      # ^^^ Real codes ^^^
  
      def myloop():
          print('Hello World!')
          return
      root.mainloop(myloop, True)
  </code></pre>
  
  <blockquote>
    <p>Output:</p>
  
  <pre><code>Traceback (most recent call last):
    File "C:\Users\User\Desktop\PyGameUI\__init__.py", line 127, in &lt;module&gt;
      root.mainloop(myloop, True)
    File "C:\Users\User\Desktop\PyGameUI\__init__.py", line 100, in mainloop
      functuple = tuple(func)
  TypeError: 'function' object is not iterable
  </code></pre>
  </blockquote>