【发布时间】:2019-04-02 11:24:33
【问题描述】:
在 Python 中编程时,有时我需要启动函数和对象方法,如下所示:
obj1.launch_method1(); // object method
do_something(); // general function
obj1.launch_method2(); // object method
使用with 语句,变为:
with obj1:
launch_method1();
do_something();
launch_method2();
在我看来,这会引起混淆,因为下一个程序员可能会错误地认为do_something() 是一个对象方法而不是一个通用函数。
最重要的是,大多数 IDE 都具有智能感知功能,因此当您键入 obj1.(注意点)时,会出现一个方法和属性列表,这使得键入 obj1.launch_method1()、obj1.launch_method2() 之类的内容变得非常容易, ...
因此,从程序员的角度来看,with 语句的使用似乎没有优势。
但是,with 语句似乎启动了__enter__ 和__exit__ 调用,这似乎创建了新的上下文。那些电话是什么?这是什么意思? with 语句的使用有什么不同吗?如果有,是哪一个?
【问题讨论】:
-
如果下一个程序员混淆了 Python
with语句和 Pascalwith语句,他只会错误地认为do_something()是一个对象方法。with obj1: launch_method()不与obj1.launch_method()相同。查看上下文管理器的文档。去掉分号;这是帕斯卡的另一个习惯。 -
我投了反对票,因为这个问题似乎是用完全不同的语言描述
with语句。给出的这个代码示例的行为方式与 Python 中描述的方式不同。过多的分号让我怀疑他们是想问关于 Javascript 的问题。第一个代码块中的 cmets 也不是 Python 语法。 -
我投票决定将此问题作为题外话结束,因为尽管它声称与 Python 有关,但它似乎与 Javascript 有关。
-
查看标准
with open("file") as f:会显示,不能删除任何标识符。 enter 和 exit 创建和销毁范围内唯一的上下文,那么哪个应该是新的?
标签: python language-lawyer with-statement