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中没有任何指令告诉解释器这一点。
通过赋值,可以轻松地在Python中实现with的关键好处。
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
极客笔记