请问Python中,为什么read是一个函数,而write是一个方法?

发布时间:
2024-12-27 22:56
阅读量:
7

古代语言里把子程序分为两类。有返回值的叫“函数”,没有返回值的叫“过程”(比如 Basic 里的 Sub 和 Pascal 里的 Procedure)。一般来说,调用“函数”是为了获取返回值,而调用“过程”是为了产生某种副作用。

现代语言一般合并两者,统称为“函数”,因为是否有返回值其实并不重要,不足以用来区分两个不同的概念,也没有必要占用两个不同的关键字。但这里的“函数”只是用来指代“子程序”而已,并不是数学上的“映射”。

有了面向对象编程之后,又引入了“方法”这个名词。方法其实就是一个关联到对象(或者类)的函数,这个对象作为数据的载体,在方法的多次调用之间存储数据、维持状态。当然,一个“传统函数”也可以靠全局变量(或者外部的数据载体,比如文件、数据库)来获得这个能力。面向对象编程并不提供额外的表达能力,而只是提高了代码的可读性而已。

方法只是特殊的函数,你把它们都叫函数我觉得也没有任何问题。你的教科书的作者可能也没有刻意区分,不小心混用了这两个名词。他写 read 的时候随手用了“函数”这个称呼,然后恰好被你记住了而已。

至于调用的时候有没有参数,有没有返回值,更像是传统语言里“函数”和“过程”的区分,调用 sort, write 的时候更多的是在利用它的副作用,而调用 sorted, read 的时候更多的是想获取它的返回值。但其实 write 也有返回值(写入的字节数),只是大部分人都不用。read 也可以加参数(读取的最大长度),而且也有副作用(移动文件指针)。从这里就可以看出现代语言不再区分“函数”和“过程”的原因,确实没有意义。

END