知行编程网知行编程网  2022-10-13 19:00 知行编程网 隐藏边栏  0 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python为什么没有属性赋值的“with”语句?的相关知识,包括赋值语句的要求,以及arcgis属性表字段赋值这些编程知识,希望对大家有参考作用。

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


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

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

with obj:
    a = 1               # equivalent to obj.a = 1
    total = total + 1   # obj.total = obj.total + 1

在Python中,这样的结构是不明确的。

其他语言,例如 ObjectPascal、Delphi 和 C++ 使用静态类型,因此对于分配给哪个成员没有歧义。这就是静态类型的重点——编译器在编译时总是知道每个变量的范围。

Python 使用动态类型。无法提前知道在运行时引用了哪个属性。可以动态地从对象中添加或删除成员属性。这使得通过简单阅读无法知道引用了哪些属性:本地属性、全局属性或成员属性?

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

def foo(a):
    with a:
        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 在运行时解析名称绑定,而第二个版本只需要执行一次解析。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享