它必须是非常基本和明显的东西,因为我无法通过谷歌或在这里找到答案......
当我调用方法时,括号在Python中有什么不同?
带有pygame和括号的示例代码:
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((640, 480))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
当我单击窗口的十字架时,它会关闭,sys.exit()是Traceback中调用的最后一个东西。
当我将其更改为:
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((640, 480))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit
pygame.display.update()
它仍然退出,但显示错误是Traceback中的最后一项。
当我在这里关注Panda3D的教程时,我遇到了这个问题: http://www.mygamefast.com/volume1/
在一些问题中(例如,在“ArcadeFlightGame”类的“keyboardSetup”方法中:http://www.mygamefast.com/volume1/issue5/4/),他调用“sys.exit”而不是“sys.exit()”并且游戏终止正确。如果我将其更改为“sys.exit()”,则在启动时会导致一些错误。
这似乎是非常基本的,以至于没有人真正在任何地方解释过......如果有人能在这方面给我一点启示,我真的很感激:/
答案 0 :(得分:5)
如果您不使用括号,则不会调用该函数。就这么简单。 sys.exit
绝对不做任何事,sys.exit()
调用该函数。
话虽如此,有时没有括号的函数的名称将被传递给其他函数,或绑定到事件。在这种情况下,不使用括号,因为您正在告诉其他功能或事件"在适当的时间调用它"。
例如,在链接到的教程中就是这行代码:
self.accept("escape", sys.exit)
这是不调用sys.exit。相反,它告诉事件系统"当您检测到转义键时,请调用此函数"。在调用此代码时,sys.exit
不被调用,而是注册以便稍后调用。当按下转义键时,底层框架实际上将使用括号调用该函数。
因此,立即调用函数(使用()
)和注册函数(仅使用名称,不使用()
)之间存在差异。