为什么Python没有用于属性赋值的“with”语句?


Python 确实有 with 语句。它包装了代码块的执行,在进入和退出代码块时调用代码。

with obj: a = 1 total = total + 1

上面的 a = 1 等价于以下内容:

obj.a = 1

并且,total = total + 1 等价于:

obj.total = obj.total + 1

编程语言使用静态或动态类型。

静态类型

静态指的是程序的执行,其中对象的类型在编译时确定/已知,即当编译器执行代码时,它知道对象所属的对象或类的类型。

像 Object Pascal、Delphi 和 C++ 这样的编程语言使用静态类型,因此可以明确地知道正在赋值给哪个成员。这是静态类型的主要优点——编译器始终在编译时知道每个变量的作用域。

动态类型

在动态类型中,对象的类型在运行时确定。Python 使用动态类型。无法预先知道运行时将引用哪个属性。

让我们来看一个例子:

def demo(x): with k: print(x)

这段代码假设 k 必须有一个名为 x 的成员属性。但是,在 Python 中没有任何内容告诉解释器这一点。

with 语句的主要好处在 Python 中可以通过赋值轻松实现:

function(args).mydict[index][index].k = 21 function(args).mydict[index][index].l = 42 function(args).mydict[index][index].m = 63

上面也可以通过以下方式实现:

ref = function(args).mydict[index][index] ref.k = 21 ref.l = 42 ref.m = 63

更新于:2022年9月20日

140 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告