为什么在Python中yield函数不需要括号?
在Python中,我多次看到用于创建生成器的为什么在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
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()
以及universalint()
为什么会有括号?它们是函数。一个东西如何成为关键字,另一个东西如何成为函数?我的意思是,它们都像一个方法,接收数据,处理并返回值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