Python 为什么open()和.read()的语法不同?

Python 为什么open()和.read()的语法不同?,python,syntax,Python,Syntax,这是一个新手问题,但我环顾四周,很难找到任何与这个问题相关的东西,可能是因为它对其他人来说太简单/太明显了 因此,我正在学习Zed Shaw的《艰苦学习Python》,我正在练习15。这不是我第一次接触python,但这次我真的想从更基本的层面上理解它,这样我就可以用编程语言做一次真正的事情了。我还应该警告一下,我在面向对象编程方面没有很好的背景,也没有完全内化什么是对象、类等等 不管怎样,这是练习。想法是了解基本的文件打开和阅读: from sys import argv script, f

这是一个新手问题,但我环顾四周,很难找到任何与这个问题相关的东西,可能是因为它对其他人来说太简单/太明显了

因此,我正在学习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 readtxt? 为什么我要在变量前面加一个句点,在变量后面加一个函数? 或者,为什么第5行没有写入txt=filename.open


这让我很困惑。是否只是一些函数有一种语法,而另一些函数有另一种语法?或者我不了解如何将变量传递给函数。

要回答这个问题,你应该对面向对象编程有一些了解

open是一个普通函数,第一个参数是一个字符串,带有文件的路径。此函数的返回值是一个对象

进一步的工作是通过使用这个对象来完成的。对象也有函数,但称为方法。这些方法在该对象的上下文中被调用,并且点将对象与方法连接起来。所以txt.read意味着您正在从txt对象调用read方法


但是如果你真的想理解这一点,你应该看看面向对象编程。

要回答这个问题,你应该对面向对象编程有一些了解

open是一个普通函数,第一个参数是一个字符串,带有文件的路径。此函数的返回值是一个对象

进一步的工作是通过使用这个对象来完成的。对象也有函数,但称为方法。这些方法在该对象的上下文中被调用,并且点将对象与方法连接起来。所以txt.read意味着您正在从txt对象调用read方法


但是如果你真的想理解这一点,你应该看看OOP。

你遇到的是方法和函数

open是一个全局函数,它只将括号中的内容作为参数

读取是文件对象的一种方法。表达式txt.read调用txt对象的read方法。在引擎盖下,txt对象作为其读取方法的第一个参数传递。read方法的定义如下:

class File(object):
     def read(self):
         # do whatever here
         # self is whatever object appears to the left of the dot in foo.read

根据上面的定义,您只能在定义了读取方法的对象上使用像read这样的方法。

您遇到的是方法vs函数

open是一个全局函数,它只将括号中的内容作为参数

读取是文件对象的一种方法。表达式txt.read调用txt对象的read方法。在引擎盖下,txt对象作为其读取方法的第一个参数传递。read方法的定义如下:

class File(object):
     def read(self):
         # do whatever here
         # self is whatever object appears to the left of the dot in foo.read
根据上面的定义,您只能在定义了读取方法的对象上使用像read这样的方法。

Syntax 具体到语法上的区别:open是一个函数,read是一个对象方法

调用open函数时,它首先返回一个对象txt,然后再次返回txt\u

txt是类文件的对象。类文件的对象是用read方法定义的。因此,在上面的代码中:

txt = open(filename)
调用open函数并将类文件的对象分配到txt中

之后,代码:

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

物体 在这个场景中,了解对象不仅定义为数据实体,而且还定义了针对这些实体的内置操作,这一点很重要

e、 g.car类的假设对象可以用启动引擎、停止引擎、打开门等方法定义

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

my_car = create_car(type_of_car)
my_car.start_engine()
语法 具体到语法上的区别:open是一个函数,read是一个对象方法

调用open函数时,它首先返回一个对象txt,然后再次返回txt\u

txt是类文件的对象。类文件的对象是用read方法定义的。因此,在上面的代码中:

txt = open(filename)
调用open函数并将类文件的对象分配到txt中

之后,代码:

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

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

e、 g.car类的假设对象可以用启动引擎、停止引擎、打开门等方法定义

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

my_car = create_car(type_of_car)
my_car.start_engine()

如果你已经在练习15了,而你仍然有这样的问题,我建议你再读一本书/阅读另一本教程-看起来你的问题没有以正确的方式呈现给你。@jamylak:什么?Java甚至没有函数。我的意思是一般理解较低级别的编程…@jamylak:这与较低级别的编程有什么关系?他对为什么要在变量前面加句点,在变量后面加函数和文件流感到困惑。我建议再读一本书/读另一本教程如果你已经在练习15了,而你仍然在问这样的问题——看起来你的问题没有以正确的方式呈现给你。@jamylak:什么?Java甚至没有函数。我的意思是一般理解较低级别的编程…@jamylak:这与较低级别的编程有什么关系?他被一些事情弄糊涂了,比如为什么他应该在变量前面加句点,在变量后面加函数,然后再加文件流。