2015-03-02 72 views
2

我看到人们偶尔打开内置的file的文件处理程序;特别是在pyyaml documentationPython打开和文件

这让我困惑的Python documentation状态:

当打开一个文件,这是最好使用的open()的,而不是直接调用此构造。文件更适合于类型测试(例如,编写isinstance(f,file))。

所以这似乎暗示,fileopen做同样的事情,但file是一个类型,而open是一个函数:

>>> open 
<built-in function open> 
>>> file 
<type 'file'> 

,他们都返回file类型的对象:

>>> open('/dev/zero') 
<open file '/dev/zero', mode 'r' at 0x7f9bb0b964b0> 
>>> file('/dev/zero') 
<open file '/dev/zero', mode 'r' at 0x7f9bb0b96540> 

有没有区别o f使用其中一个还是另一个?

是否有使用file vs open打开文件的注意事项或优点?

回答

0

是的,他们做同样的事情。使用一个与另一个只是一个风格和可读性的问题;在行为方面没有其他警告或优点。

+3

不完全正确; 'open'允许你在'with'语句中使用它作为上下文管理器,以便在你的代码中处理该文件的错误中正确关闭该文件。 – aruisdante 2015-03-02 18:49:02

+1

'open'是一个比较好的方法(工厂vs构造函数),另外''file'自3.0以来就被删除了。而且,@aruisdante,'file'也可以在上下文管理器中使用。 – bereal 2015-03-02 18:52:22

+1

@bereal呵,果然可以。但我完全同意你关于使用工厂和具体类型构造函数的观点,特别是在像鸭子这样的鸭子类动态语言中。 – aruisdante 2015-03-02 18:53:54