为什么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
广告