Python文档指定,如果函数只接受单个参数,则省略括号是合法的,但是
myfunction "Hello!"
生成语法错误。那么,怎么回事?
编辑:
我所读的语句仅适用于
在只有一个参数的调用中可以省略括号。
发布于 2010-05-28 15:01:14
编辑:
如果您写下一个生成器表达式,如stuff = (f(x) for x in items)
,您需要括号,就像您需要围绕列表理解的[ .. ]
。
但是,当您将一些东西从生成器表达式传递到一个函数(这是一个非常常见的模式,因为这是生成器背后的一个好主意)时,您就不需要两组括号了--而不是像s = sum((f(x) for x in items))
这样的东西(外部括号表示函数调用,在内部表示生成器表达式),您可以只编写sum(f(x) for x in items)
发布于 2010-05-28 18:19:20
您可以使用IPython -- %autocall
magic command控制这个特性(以及-autocall
命令行选项)来实现它。使用%autocall 0
禁用特性%autocall 1
(默认值),使其仅在存在参数时才能工作,而%autocall 2
使其工作,甚至对于参数较少的可调用性也是如此。
In [2]: %autocall 1
Automatic calling is: Smart
In [3]: int '5'
------> int('5')
Out[3]: 5
In [4]: %autocall 2
Automatic calling is: Full
In [5]: int
------> int()
Out[5]: 0
发布于 2010-05-28 14:50:18
如果没有括号,这将不是functions
,而是statements
或keywords
(语言内部的)。
This StackOverflow thread (有一些非常好的答案) contains a lead as,说明如何用纯Python创建自己(通过高级黑客,在99.99%的情况下不是一个好主意)。
https://stackoverflow.com/questions/2932887
复制