为什么函数 运行 没有参数?

Why does function run without paramater?

我目前正在学习 python 中的 curses,我在网上发现这段代码让我很困惑。

import curses

def draw_menu(stdscr):
    # do stuff
    # if you want more code just let me know


def main():
    curses.wrapper(draw_menu)


if __name__ == "__main__":
    main()

当我 运行 时,我没有得到预期的 missing 1 required positional argument 错误,因为 curses.wrapper(draw_menu) 行中没有传递任何参数。这是 curses 的事情吗?非常感谢任何帮助。

函数是一种数据类型,与字符串、整数等一样。

def my_function(txt):
  print(txt)

此处type(my_function) # => <class 'function'>

当你用括号调用它时,你调用了函数内部的代码:my_function('hello') # => prints hello

在那之前你可以完美地将一个函数作为参数传递给另一个函数。 最后一个可以调用你传递给它一些参数的那个。

就像你的情况一样,我猜想 curses.wrapper() 创建了一个屏幕界面,它作为参数传递给你的 draw_menu() 函数。 您或许可以使用该屏幕对象来构建您的 curse 应用程序。

看到这个:Python function as a function argument?

curses.wrapper(draw_menu)curses.wrapper(draw_menu()) 有很大区别。 curses.wrapper(draw_menu) 调用 curses.wrapper 并将函数 draw_menu 作为参数传递给它。相反,curses.wrapper(draw_menu()) 调用 draw_menu 并将其 return 值传递给 curses.wrapper.

curses.wrapper 将调用您传递给它的函数。从那个 link:

Initialize curses and call another callable object, func, which should be the rest of your curses-using application.

例如,当curses完全初始化时,它将调用draw_menu

这是来自 herecurses.wrapper 的签名。

curses.wrapper(func, /, *args, **kwargs)

它说您需要给 curses.wrapper 一个函数引用参数,后跟零个或多个参数和关键字参数。您的代码满足这些要求。

Python 允许这样的函数签名,使开发人员在调用者可以传递的内容方面具有很大的灵活性。