在python中,我们说万物皆对象,
例如:表达式x<y
内部调用 x.__lt__(y)
哪里__lt__
是类对象中的方法('int' 表示值是否为 2 和 3)并且 x 和 y 是对象的引用变量
和
用户定义函数 square(3)
内部调用 square.__call__(3
)
其中“square”是类“function”的对象名称,引用变量“square”指向该对象名称“square”。
所以,
如何在内部解释 if-elif-else、for、break、continue、pass、lambda 语句?作为对象?
如果是,您能否举一些例子以类似上述方式进行可视化?
最佳答案
语句在 Python 中不表示为对象(包括您提供的示例)。相反,事情的工作方式是语言语法通常映射到您可以定义的“ Hook ”,以影响语法在特定情况下的作用。例如,<
语法映射到 __lt__
钩。这并不意味着 <
符号“是一个对象”;这只是意味着您可以在对象上定义方法来自定义它们如何使用该语法。
您询问的一些语法可以通过魔术方法以类似的方式受到影响。
if
检查其条件是否为 bool 值 true。即 if x:
内部调用 bool(x)
确定是否x
“算”为 True 或 False。您可以通过定义 __nonzero__
来影响此决定。方法(或 Python 3 中的 __bool__
)。 elif
工作方式相同。 (你不能改变 else
的作用。)当然,还有很多 if
条件涉及比较,您可以按照您已经提到的方式自定义这些比较。例如,如果您想自定义 if myObject < 2
的方式会工作,你可以写一个__lt__
魔术方法。
for
从事 iterator protocol .您可以通过定义 __iter__
使您自己的对象可迭代和/或 next
方法。你不能影响 break
和 continue
完全正确,但您可以编写“假”通过跳过元素继续,或通过提高 StopIteration
来“假”中断的迭代器.
lambda
只是定义函数的另一种语法。你不能改变什么 lambda
确实如此,但尚不清楚重点是什么。
pass
是一个什么也不做的声明。你不能改变它的作用,而且真的没有意义:它的存在就是为了什么都不做。
关于python - 查询python控制流语句和lambda exp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22802513/