为什么在Python中yield函数不需要括号?

为什么在Python中yield函数不需要括号?,python,python-2.7,python-3.x,yield-keyword,Python,Python 2.7,Python 3.x,Yield Keyword,在Python中,我多次看到用于创建生成器的yield函数。从技术上讲,此函数和print函数都执行方法的操作,因为它们返回一个值。然而,在从Python2到Python3的转换过程中,print函数像普通的方法调用一样获得了括号,但是yield保持不变。另外,yield获得保留关键字的淡黄色,print是保留方法的紫色。为什么yield不被视为一种方法,并以这种方式着色,同时不使用括号语法 (类似地,返回的为什么也没有括号?) 让我再添加一些东西,在许多其他语言中,yield和continue

在Python中,我多次看到用于创建生成器的
yield
函数。从技术上讲,此函数和
print
函数都执行方法的操作,因为它们返回一个值。然而,在从Python2到Python3的转换过程中,
print
函数像普通的方法调用一样获得了括号,但是yield保持不变。另外,
yield
获得保留关键字的淡黄色,
print
是保留方法的紫色。为什么
yield
不被视为一种方法,并以这种方式着色,同时不使用括号语法

(类似地,
返回的
为什么也没有括号?)


让我再添加一些东西,在许多其他语言中,yield和continue也没有括号。我只是想知道除了保留之外,还有什么不同之处。还有许多其他的保留方法可以得到括号

print
不是一个有括号的函数:它从一个语句变成了一个函数
yield
仍然是一个语句,类似于
return
。语法突出显示是特定于您的开发环境的


您可以找到有关的更多信息,以及有关的更多信息。另请参阅和上的文档。

产量
不是一个函数,它是一个关键字,根据需要,它不需要括号-

原子产率::=“(“原子产率表达式”)”

收益率表达式::=“收益率”[表达式列表]


print
曾经是Python 2中的一个语句,但它在Python 3中被更改为一个内置函数,使用了
print
是Python 2中语言规范定义的一个关键字,并成为Python 3中的一个内置函数(由标准库规范定义)<代码>收益率
过去是,现在仍然是一个关键词。

所以我去挖掘答案。从PEP 255开始,PEP为我们提供了
收益率
关键字

问:为什么要为“收益率”添加一个新的关键词?为什么不使用内置函数呢

A.控制流在Python中通过关键字更好地表达,并且 产量是一个控制结构。也有人认为这是有效的 Jython中的实现要求编译器能够 在编译时确定潜在的挂起点,然后 关键字使这变得容易。CPython参考的实施也是如此 大量利用它来检测哪些函数是生成器- 函数(尽管用一个新的关键字代替“def”可以解决这个问题 对于CPython——但是人们会问“为什么要有一个新的关键词?”这个问题 不需要任何新关键字)

问:那么为什么不使用没有新关键字的其他特殊语法呢?对于 例如,其中一个代替“收益率3”:

返回3并继续
返回并继续3
收益生成3
继续返回3
返回>>,3
来自发电机回路3
返回>>3
返回>3


这不是一个函数,它指出了
return
缺少参数,因为这是指定语言的方式。你可能会问,为什么关键词是英语而不是世界语:-)我很难弄清楚答案对任何人来说都是有用的,除了好奇。你的答案在。将来,如果你想知道为什么某些东西会以某种方式出现在python中,请查看相关的。说真的,你可以通过颜色来区分关键字和函数?为什么这些被认为是语句?为什么不是其他语句,只是这些?感谢你的回答即使它是内置的,也有许多其他内置函数,如
hash()
set()
以及universal
int()
为什么会有括号?它们是函数。一个东西如何成为关键字,另一个东西如何成为函数?我的意思是,它们都像一个方法,接收数据,处理并返回值
yield
语句不接收数据,不处理数据,并且不返回值。您完全错误地描述了
yield
的功能。它实际做的是触发一个控制流,使包含它的函数返回一个值(以不同于非生成器函数的特定方式)。为什么你如此困惑,
yield
不是一个函数?显然,它的行为方式与函数完全不同。人们是不是决定让
yield
不带括号,还是这个概念背后有某种逻辑或起源?不,在
print
成为函数的背后有某种起源,因此yield不是应用程序级功能,但是
print
是的,大多数其他语言也有
print
作为一个函数,因此将
print
作为一个语句将需要解释器专门处理它,而解释器不想这样做。只有函数调用需要括号。请看python文档。非常感谢您的回答。我只是想,既然到目前为止编程中的每件事都是合乎逻辑的,那么这件事就必须有一个逻辑。@ytpillai那么谢天谢地,你是从Python而不是PHP(或ksh)开始的-否则你可能会掉一些头发!我听说PHP被描述为一个工具箱,所有东西都只是一点点<代码>收益率
作为一个函数对我来说毫无意义。它在任何方面都不像函数。如果你考虑调用栈,它几乎与函数正好相反。
   return 3 and continue
   return and continue 3
   return generating 3
   continue return 3
   return >> , 3
   from generator return 3
   return >> 3
   return << 3
   >> 3
   << 3
   * 3