Python:用(和)调用方法有什么区别?

Pat*_*ann 4 parentheses

它必须是非常基本和明显的东西,因为我无法通过谷歌或在这里找到答案...

当我调用方法时,括号在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()
Run Code Online (Sandbox Code Playgroud)

当我单击窗口的十字形时,它会关闭,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()
Run Code Online (Sandbox Code Playgroud)

它仍然退出,但显示错误作为Traceback中的最后一项.

当我在这里关注Panda3D的教程时,我遇到了这个问题:http: //www.mygamefast.com/volume1/

在几个问题中(例如,在"ArcadeFlightGame"类的"keyboardSetup"方法中:http://www.mygamefast.com/volume1/issue5/4/ ),他调用"sys.exit"而不是"sys. exit()"并且游戏正确终止.如果我将其更改为"sys.exit()",则在启动时会导致一些错误.

这似乎是非常基本的,以至于没有人真正在任何地方解释过......如果有人能在这方面给我一点启发,我真的很感激:/ /

Bry*_*ley 5

如果不使用括号,则不调用该函数.就是这么简单.sys.exit什么都不做,sys.exit()调用函数.

话虽如此,有时没有括号的函数的名称将被传递给其他函数,或绑定到事件.在这种情况下,不使用括号,因为您告诉其他函数或事件"在适当的时间调用此函数".

例如,在链接到的教程中是这行代码:

self.accept("escape", sys.exit)
Run Code Online (Sandbox Code Playgroud)

不是调用sys.exit.相反,它告诉事件系统"当您检测到转义键时,调用此函数".这段代码被调用的时候,sys.exit不是叫,而是注册稍后调用.当按下转义键时,底层框架实际上将使用括号调用该函数.

因此,立即调用函数(使用())和注册函数(仅使用名称,否())之间存在差异.

  • @PatricHartmann:我已经更新了我的答案.你错误地解释了这个教程.你认为它在调用`sys.exit`,但事实并非如此.它只是用一个事件注册`sys.exit`命令.当事件触发时,它将使用括号调用该函数. (2认同)