可以不使用括号调用单参数Python函数吗?

7 投票
4 回答
7712 浏览
提问于 2025-04-15 23:18

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)

撰写回答