您现在的位置是:课程教程文章
Python为什么没有属性赋值的“with”语句?
2023-12-18 17:45课程教程文章 人已围观
-
CRMEB4产品规格属性多选一次购买多个
CRMEB4产品规格属性多选一次购买多个1. 老师介绍 CRMEB特邀讲师,CRMEB论坛超级版主,CRMEB开发群管理员。 2、课程介绍... -
数据分析之
数据分析之1、用户行为数据与属性数据的分析思路与方法 2、bilibili会员购平台广告案例讲... -
【赵强老师】在Hive中使用Load语句执行数
【赵强老师】在Hive中使用Load语句执行数Apache Hive数据仓库软件设施,可以读、写和管理分布式存储上的大数据集(large... -
MSC Marc非线性仿真分析 2021入门经验分享—
MSC Marc非线性仿真分析 2021入门经验分享—MSC.MARC是功能齐全的高级非线性有限元软件,具有极强的结构分析能力。可以处...
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在运行时解析名称绑定,而第二个版本只需要执行一次解析。
更多Python答疑内容,请关注Python视频教程!!
课程教程:Python为什么没有属性赋值的“with”语句?下一篇:没有了