python - 查询python控制流语句和lambda exp

标签 python

在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方法。你不能影响 breakcontinue完全正确,但您可以编写“假”通过跳过元素继续,或通过提高 StopIteration 来“假”中断的迭代器.

lambda只是定义函数的另一种语法。你不能改变什么 lambda确实如此,但尚不清楚重点是什么。

pass是一个什么也不做的声明。你不能改变它的作用,而且真的没有意义:它的存在就是为了什么都不做。

关于python - 查询python控制流语句和lambda exp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22802513/

相关文章:

具有属性约束(例如必需/可选)的 Python ORM?

python - python ssl 库中的 ssl.SSLError : [SSL] PEM lib (_ssl. c:3833)

python - 编程风格和避免空值

python - numpy 中的选择性行和矩阵

python - Django 与 MySQL uuid

Python zip() 函数

python - 如何打印/存储非 ASCII 字符(unicode?)

python - 如何避免在必须尝试 : instead of if-elsif 的情况下增加缩进

python - 如何通过取 3 个网格点编写炉子质量平衡方程的 Python 代码?我需要绘制密度剖面图

python - Docker,错误 :zygote_host_impl_linux. cc(89)] 不支持在没有 --no-sandbox 的情况下以 root 身份运行