当前位置: 首页 > 图灵资讯 > 行业资讯> Python为什么没有属性赋值的“with”语句?

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

来源:图灵python
时间: 2025-02-09 17:51:16

为什么python中没有属性赋值?with”语句?

有一个Python 'with' 句子,它包装了块的执行,并在块的入口和出口调用代码。有些语言的结构是这样的:

withobj:
a=1#equivalenttoobj.a=1
total=total+1#obj.total=obj.total+1

这种结构在Python中并不清楚。

ObjectPascal等其他语言、delphi和C++ 使用静态类型,所以你可以毫不含糊地知道分配给什么成员。这是静态类型的关键 -- 在编译过程中,编译器总是知道每个变量的作用域。

Python使用动态类型。不可能提前知道在运行过程中引用哪个属性。成员属性可以在对象中动态添加或删除。这使得通过简单的阅读无法知道引用的属性是什么:局部属性、全局属性还是成员属性?

例如,使用以下不完整的代码段:

deffoo(a):
witha:
print(x)

假设代码段 "a" 必须有一个名字 "x" 成员属性。然而,解释器并没有在Python中被告知。假设 "a" 这是一个整数,会发生什么?假如有一个名字? "x" with块中是否会使用全局变量?正如你所看到的,python的动态特性使得这种选择更加困难。

然而,Python 通过赋值很容易实现 "with" 以及类似语言特征(减少代码量)的主要好处。替换:

function(args).mydict[index][index].a=21
function(args).mydict[index][index].b=42
function(args).mydict[index][index].c=63

写成这样:

ref=function(args).mydict[index][index]
ref.a=21
ref.b=42
ref.c=63

这也有提高执行速度的副作用,因为Python在运行过程中对名称绑定进行分析,而第二个版本只需要进行一次分析。

更多Python答疑内容,请关注Python视频教程!!