可以不使用括号调用单参数Python函数吗?
Python的文档说明,如果一个函数只接收一个参数,可以省略括号,但
myfunction "Hello!"
这样会产生语法错误。那么这是怎么回事呢?
补充说明:
我看到的那句话只适用于生成器表达式:
在只有一个参数的调用中,可以省略括号。
4 个回答
2
如果没有括号,那些就不是 函数
,而是 语句
或 关键字
(语言本身自带的)。
这个StackOverflow的讨论帖(里面有一些非常不错的回答) 提供了一些线索,告诉我们如何在纯Python中创建自己的东西(通过一些高级的技巧,但在99.99%的情况下,这并不是个好主意)。
5
你可以使用IPython来实现这个功能——这里有一个叫做%autocall
的魔法命令来控制这个特性(还有一个命令行选项叫做-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
8
关于你的修改:
如果你写一个生成器表达式,比如 stuff = (f(x) for x in items)
,你需要加上括号,就像在列表推导式中需要用 [ .. ]
括起来一样。
但是,当你把生成器表达式的内容传给一个函数时(这是一种很常见的用法,因为生成器的主要作用就是这样),你就不需要两组括号了。比如说,像 s = sum((f(x) for x in items))
这样的写法(外面的括号表示调用函数,里面的括号是生成器表达式)其实可以简化成 sum(f(x) for x in items)
。