为什么我不能“字符串”.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之前,它是一个声明 (就像break
或import
),你可以使用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