2010-05-28 150 views
5

Python的文档指定是是合法的省略括号如果一个函数只采用单个参数,但可能调用单参数Python函数而不使用括号?

myfunction "Hello!" 

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

(我使用Python 3.1)

编辑:

,我读仅适用于generator expressions声明:

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

确定吗?你能告诉我们你在哪里阅读该规则?你对红宝石感到困惑吗? – 2010-05-28 22:30:37

+1

您可能会将Python与Ruby或Lua混淆,在这种情况下可能会省略鬼臼。 – interjay 2010-05-28 22:36:47

+2

@Jen:他们讨论了表示生成器的括号,而不是函数调用。 – SilentGhost 2010-05-28 23:00:35

回答

6

为了您的编辑:

如果你写下一台发电机的表情,像stuff = (f(x) for x in items)你所需要的支架,就像你所需要的[ .. ]周围列表理解。但是当你将一些东西从一个生成器表达式传递给一个函数(这是一个非常常见的模式,因为这几乎是发生器背后的大想法),那么你不需要两组括号 - 而不是像s = sum((f(x) for x in items)) (括号外,表示一个函数调用,内为发电机表达式),你可以只写sum(f(x) for x in items)

2

没有括号那些不会functionsstatementskeywords(语言固有)。

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

0

据我了解规则是只有约发电机表情... 因此,例如:SUM(X 2 X在范围内(10)),但您仍然必须编写: reduce(operator.add,(x 2 for x in range(10)))。

虽然这不适用于泛型函数。

3

你可以用iPython做到这一点 - 在-autocall命令行选项可以控制这个功能(使用-autocall 0禁用该功能,-autocall 1,默认,只具有一种论点是目前它的工作,并-autocall 2有它即使没有参数的可调参数也可以工作)。

相关问题