【问题标题】:Why is open() preferable over file() in Python? [duplicate]为什么在 Python 中 open() 优于 file()? [复制]
【发布时间】:2012-08-13 21:18:53
【问题描述】:

可能重复:
Python - When to use file vs open

来自官方python文档,

http://docs.python.org/library/functions.html#file

打开文件时,最好使用 open() 而不是调用 这个构造函数直接

但它没有给出理由。

【问题讨论】:

  • 对于初学者来说,它在 Python 3 中已经消失了。虽然这是一个结果和强化,而不是一个原因。
  • 我对此并不肯定,所以我不会对此做出回答,但这可能与Python如何处理“with”关键字有关。我不确定你是否可以在构造函数中使用“with”。
  • @Marcin io 中的类型之一。
  • @StormKiernan:fileopen 都与 with 语句一起使用。任何定义正确的__enter__()__exit__() 方法都可以。

标签: python file


【解决方案1】:

The Zen of Python:

应该有一种——最好只有一种——明显的方法。

所以fileopen 应该去。

>>> type(file)
<type 'type'>
>>> type(open)
<type 'builtin_function_or_method'>

open 是一个可以返回任何内容的函数。 file() 仅返回 file 对象。

虽然open 在 Python 2 上似乎只返回 file 对象。而在 Python 2.5 之前,fileopen 是同一个对象。

正如@gnibbler 在 cmets 中所建议的那样,file 存在的最初原因可能是将其用作基类的名称。

此外,file() 原则上可以返回其他类型,例如 int() 在早期 Python 版本中所做的:

>>> type(int(2**64)) is long
True
>>> type(int()) is int
True
>>> int is long
False

这个答案与@Ryan's answer非常相似。

另外BDFL said:

"文件类是Python 2.2新增的。它代表类型(类) 由内置 open() 函数返回的对象。它的构造函数 是 open() 的别名,但为了将来和向后兼容, open() 仍然是首选。” (强调我的)

【讨论】:

  • 除了file 对象之外,它是否真的返回任何东西?
  • @delnan:据我所知,它在 Python 2 上返回 file 对象。它在 Python 3 上返回不同类型的对象。
  • 最初 fileopen 的别名,因为子类化 open 似乎很尴尬
  • @gnibbler:在 Python 2.5 之前
  • 我自己的独特观点:for file in files: 是如此自然和 Pythonic,以至于使它成为一个内置函数似乎总是一个失误。我一直在使用for file in files:,只是因为我喜欢它的外观。
猜你喜欢
  • 1970-01-01
  • 2021-06-05
  • 2023-03-15
  • 2011-04-17
  • 2023-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
相关资源
最近更新 更多