【问题标题】:Python: What is the difference between calling a method with () and without?Python:调用带有()和不带的方法有什么区别?
【发布时间】:2014-04-15 02:49:40
【问题描述】:

这一定是非常基本和显而易见的事情,因为我无法通过谷歌或在这里找到答案......

当我调用方法时,括号在 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()”,则会在启动时导致一些错误。

这似乎非常基本,以至于没有人在任何地方真正解释过...如果有人能对此有所启发,我将不胜感激:/

【问题讨论】:

    标签: parentheses


    【解决方案1】:

    如果你不使用括号,你就没有调用这个函数。就是这么简单。 sys.exit 什么都不做,sys.exit() 调用函数。

    话虽如此,有时不带括号的函数名称会传递给其他函数,或绑定到事件。在这种情况下,不使用括号,因为您正在告诉这个其他函数或事件“在适当的时间调用它”。

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

    self.accept("escape", sys.exit)
    

    不是调用 sys.exit。相反,它告诉事件系统“当您检测到转义键时,调用此函数”。在调用此代码时,sys.exit 未被 调用,而是已注册 待稍后调用。当按下转义键时,底层框架实际上会使用括号调用该函数。

    因此,立即调用函数(使用())和注册函数(仅使用名称,不使用())是有区别的。

    【讨论】:

    • 这正是我所学到的,但在 Panda3D 教程中,他将“sys.exit”称为不带括号的“sys.exit”,然后游戏退出。这就是为什么它让我如此困惑:D
    • @PatricHartmann:我已经更新了我的答案。您误解了本教程。在您认为它调用sys.exit 的地方,它不是。它只是在事件中注册sys.exit 命令。当事件触发时,它将调用带括号的函数。
    • 谢谢!我发现几个来源都在做类似的事情,但没有人解释过为什么!非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 2023-03-06
    • 2020-04-17
    • 2011-03-31
    • 2016-10-07
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多