为什么我不能“字符串”.print()?

我对Python和Ruby(以及其他语言)中print()理解是它是一个字符串(或其他类型)的方法。 因为它是如此常用的语法:

打印“hi”

作品。

那么为什么不用Python中的"hi".print()或Ruby中的"hi".print工作呢?

当您执行类似"hi".print() ,您暗示字符串对象"hi"具有方法print 。 不是这种情况。 相反, print是一个以字符串(或其他类型)作为输入的函数。

Ruby确实有一个方法Object#display ( doc here ),它将对象的表示发送到当前输出流,或者指定为参数。

(如果我使用的话,我发现在irb中很难使用;在一行的末尾来抑制返回值的打印;如果我这样做,即使我刷新了流,也不display的输出。)

不是字符串上的方法。 在Python 3之前,它是一个声明 (就像breakimport ),你可以使用print "hi"print("hi") 。 从Python 3开始,它被一个函数 替换 ,因此您不能再使用print "hi"

打印是一种function

print语句已替换为print()函数,其中包含用于替换旧打印语句(PEP 3105)的大多数特殊语法的关键字参数。

它为什么要起作用? 字符串类很少有void print方法 – 你永远不需要它们,因为标准的静态print函数无论如何都可以打印这些字符串。 需要注意的是: method(someObject)不一定与someObject.method()相同。

你建议什么str.print应该做什么?

打印到标准输出? stderr怎么样? 还是档案? 还是一个串口?

打印到标准输出实际上是一个特例,但它无处不在,有时可能会被忽视。

那么我们每次创建字符串时都必须指定str应该打印的位置?

至少我们不得不说

 "foo".print(sys.stdout) 

希望你看起来也很糟糕。 这是责任的混乱

print不是Python中字符串的方法(或者我相信在Ruby中)。 这是一个声明(在Python 3中它是一个全局函数)。 为什么? 首先,并非您可以打印的所有内容都是字符串。 print 2怎么样?

如果你更乐意在Ruby中使用方法而不是语句,你可以使用方法display( "test".display )来实现这一点,或者很容易定义一个新方法

 class String def print puts self end end 

并像这样使用它

 "test".print