在Python中,为什么是';r+';但不是';rw';过去的意思是;read&;写“什么?”;?

在Python中,为什么是';r+';但不是';rw';过去的意思是;read&;写“什么?”;?,python,Python,在Python中,当打开文件时,我们使用'r'表示只读,而'w'表示只写。然后我们用'r+'来表示“读和写” 为什么不使用'rw'?难道'rw'看起来不比'r+'更自然吗 1月25日编辑: 哦。。我想我的问题看起来有点困惑。。我想问的是:'r'是'read'的第一个字母,'w'是'write'的第一个字母,所以'r'和'w'映射到'read'和'write'看起来很自然。然而,当谈到“读写”时,Python使用“r+”而不是“rw” 因此,问题实际上是关于命名原理,而不是它们之间的行为差异。P

在Python中,当打开文件时,我们使用
'r'
表示只读,而
'w'
表示只写。然后我们用
'r+'
来表示“读和写”

为什么不使用
'rw'
?难道
'rw'
看起来不比
'r+'
更自然吗


1月25日编辑:

哦。。我想我的问题看起来有点困惑。。我想问的是:
'r'
是'read'的第一个字母,
'w'
是'write'的第一个字母,所以
'r'
'w'
映射到'read'和'write'看起来很自然。然而,当谈到“读写”时,Python使用“r+”而不是
“rw”


因此,问题实际上是关于命名原理,而不是它们之间的行为差异。

Python从中复制模式<代码>r+是C使用的,Python坚持了40年的惯例。

这就是发生的情况:

    >>> f1 = open("blabla.txt", 'rw');
    Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:18:40) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> f1=open("blabla.txt",'rw')
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    f1=open("blabla.text",'rw')
ValueError: must have exactly one of create/read/write/append mode
f1=open(“blabla.txt”,“rw”); win32上的Python 3.3.3(v3.3.3:c3896275c0f6,2013年11月18日,21:18:40)[MSC v.1600 32位(英特尔)] 有关详细信息,请键入“copyright”、“credits”或“license()”。 >>>f1=打开(“blabla.txt”,“rw”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 f1=打开(“blabla.text”,“rw”) ValueError:必须正好有一个创建/读取/写入/附加模式
这就是在核心python中如何配置读/写/附加函数。有人会说这与旧的c风格的fopen()指令“r”“w”“r+”等有关。

不要把它当作纯英语,
r+
的意思是
读扩展的
实际上,
Python=英语。
所有的语言都有基本的规则,@John Kugelman提到,Python仍然沿用旧的语言。

注意还有w+和a+。它们可以被命名为wr和ar,但我认为有人认为r+、w+和a+在某种程度上更好。这并不是说你可以随意地把它们组合在一起,然后仍然有意义。例如,aw就没有意义。因此,为每个模式使用不同的名称比允许组合模式更有意义。
r+
w+
a+
做了三件不同的事情,并且--
fopen
是一个非常古老的C库接口——如果您通过
rw
,原始实现可能会做一些不重要的事情,C89只是禁止你这么做。POSIX
open
功能的三向选择
O_RDONLY
O_WRONLY
O_RDWR
,以及一系列修饰符总是让我觉得更符合人体工程学的设计。因此问题变成了:“在C中,为什么‘r+’而不是‘rw’用来表示“读写”?@Rafaelalmeda:我最喜欢你的答案,而且,读完后,我同意你的观点。是的,如果“读写”有“rw”,新手程序员可能会将其视为一个“组合游戏”,因此他们开始组合一些没有意义的东西,这些东西会给他们带来挫折,给用户带来bug。有不同的名字会稍微增加学习负担,但可以节省很多精力。总的来说,这是一个成本效益高的问题。@Kynit:这个问题的发展趋势很有趣,我没想到。。。显然,我需要更多地学习如何提出一个明确的问题,他们应该学习如何解释一个问题;-)@IMMIBIS可以说是,“它是<代码> RW < /代码>,因为这就是C所做的。”我想另一个论点是“Python基金会根本不想以不同的方式拥有它”。如果
Python
English
都是变量,那么您可能不想这样做,因为您正在进行id比较。但是,有些语言(至少是C和Java)专门使用
=
实现id/引用相等。不过,C++和C语言等允许您在值相等的情况下超载<代码> = = /COD>。这两种方法在我看来都是可行的。请注意,
r+/code>、
w+/code>和
a+/code>都表示“读写”,但它们都有微妙之处
r+
不创建文件,
w+
创建文件,
a+
附加到文件并在文件不存在时创建。在这方面,“一网打尽”的rw将是不明确的
wr
读起来不干净,而
aw
ar
则很奇怪。