为什么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视频教程!!