Python 3:将函数传递给 *args

科陶斯卡斯

我正在使用该_thread模块(因为它更适合我的程序)并且我想将一个函数传递给我传递给线程的函数。但是,可以只将元组传递_thread.start_new_thread()函数,但是,函数是不可迭代的!


@Willem Van Onsem - 这是完整的代码。使用 Pygame。

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)

输出:

Traceback (most recent call last):
  File "C:\Users\User\Desktop\PyGameUI\__init__.py", line 127, in <module>
    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
科陶斯卡斯

我想通了。_thread其实不好。我已经重写了我的代码 - 现在我正在使用threading!


我用tuple(func)而不是tuple((func,))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章