Skip to main content
 首页 » 编程设计

python之为什么 open() 和 .read() 的语法不同

2025年05月04日17TianFang

这是一个新手问题,但我环顾四周,却找不到与此问题相关的任何内容(可能是因为它对其他人来说太简单/太明显了)。

所以,我正在学习 Zed Shaw 的“艰难地学习 Python”,并且正在进行练习 15。这不是我第一次接触 Python,但这次我真的想从更基础的角度理解它这样我就可以真正用一种编程语言做一些事情了。我还应该警告说,我没有很好的面向对象编程背景,也没有完全内化什么是对象、类等等。

无论如何,这是练习。想法是了解基本的文件打开和阅读:

from sys import argv 
 
script, filename = argv 
 
txt = open(filename) 
 
print "Here's your file %r:" % filename 
print txt.read() 
 
print "I'll also ask you to type it again:" 
file_again = raw_input("> ") 
 
txt_again = open(file_again) 
 
print txt_again.read() 
 
txt.close() 
txt_again.close() 

我的问题是,为什么 open 和 read 函数使用不同?

例如,要读取示例文件,为什么我不/不能在第 8 行键入 print read(txt)?
为什么我在变量前面加句号,函数在后面加句号?
或者,为什么第 5 行不写成 txt = filename.open()?

这让我很困惑。仅仅是一些函数有一种语法而另一些函数有另一种语法吗?还是我不了解如何将变量传递给函数。

请您参考如下方法:

语法

特别是语法差异:open() 是一个函数,read() 是一个对象方法。

当您调用 open() 函数时,它会返回一个对象(首先是 txt,然后是 txt_again)。

txt 是 file 类的对象。 file 类的对象是用方法read() 定义的。所以,在你上面的代码中:

txt = open(filename) 

调用 open() 函数并将类 file 的对象分配给 txt。

之后,代码:

txt.read() 

调用与对象 txt 关联的方法 read()。

对象

在这种情况下,重要的是要了解对象不仅被定义为数据实体,而且还具有针对这些实体的内置操作。

例如car 类的假设对象可以使用 方法 定义,例如 start_engine()、stop_engine()、open_doors() 等

因此,与上面的文件示例类似,创建和使用汽车的代码可能是:

my_car = create_car(type_of_car) 
my_car.start_engine() 

(Wikipedia entry on OOP.)