可以在不使用括号的情况下调用单参数Python函数吗?

时间:2010-05-28 22:23:14

标签: python syntax

Python文档指定如果函数只接受一个参数,则省略括号是合法的,但是

    myfunction "Hello!"

生成语法错误。那么,这笔交易是什么?

(我正在使用Python 3.1)

编辑:

我所阅读的陈述仅适用于generator expressions

    The parentheses can be omitted on calls with only one argument.

4 个答案:

答案 0 :(得分:6)

为了您的编辑:

如果你写下一个生成器表达式,比如stuff = (f(x) for x in items)你需要括号,就像你需要围绕列表理解的[ .. ]一样。

但是当你将一些东西从生成器表达式传递给一个函数(这是一个非常常见的模式,因为这几乎是生成器背后的大创意)那么你不需要两组括号 - 而不是像{{ 1}}(外部括号表示函数调用,内部表示生成器表达式),您只需编写s = sum((f(x) for x in items))

答案 1 :(得分:4)

您可以使用iPython执行此操作 - -autocall命令行选项可控制此功能(使用-autocall 0禁用功能-autocall 1,默认设置,仅使其有效当一个参数出现时,-autocall 2使其工作,即使是无参数的callables。)

答案 2 :(得分:2)

如果没有括号,则不会是functions,而是statementskeywords(语言固有的)。

This StackOverflow thread(有一些非常好的答案)contains a lead as如何在纯Python中创建自己的答案(通过高级hackery,在99.99%的情况下不是一个好主意)。

答案 3 :(得分:0)

据我所知,规则只是关于生成器表达式...... 例如:sum(x 2表示范围(10)中的x),但您仍然需要写: reduce(operator.add,(x 2表示范围(10)中的x))。

但这不适用于通用功能。