Python文档指定如果函数只接受一个参数,则省略括号是合法的,但是
myfunction "Hello!"
生成语法错误。那么,这笔交易是什么?
(我正在使用Python 3.1)
编辑:
我所阅读的陈述仅适用于generator expressions:
The parentheses can be omitted on calls with only one argument.
答案 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
,而是statements
或keywords
(语言固有的)。
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))。
但这不适用于通用功能。