parentheses - python : What is the difference between calling a method with () and without?

标签 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()

当我单击窗口的十字时,它会关闭,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()”,则会在启动时导致一些错误。

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

最佳答案

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

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

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

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

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

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

关于parentheses - python : What is the difference between calling a method with () and without?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326622/

相关文章:

java - 解析文件java中的内括号

mysql - 会首先执行括号内的所有内容吗?

c - 为什么需要两个括号才能在 C 中使用宏?

haskell - 单独使用的括号 () 是什么意思?

r - 如何在R中搜索带括号的字符串

asp-classic - ASP "Cannot use parentheses when calling a Sub "

javascript - 当字符串包含括号时如何配置 RegExp

python - python解析嵌套括号,逐级抓取内容

c - 什么时候可以省略宏中参数周围的括号?

c++ - 除了运算符优先级之外,额外的括号何时会产生影响?