我对'n'和print('n')之间的区别感到困惑。

4

在Python shell中输入以下命令,我仍然感到困惑:

>>> 'n'
'n'
>>> print('n')
n

第一个输出的'n'是什么意思?另一个n又代表什么?为什么Python不会像print('n')一样打印'n'作为输出?

我认为print('n')的意思是:我(Python)把n作为字符打印出来

那么第一个输出呢?如果>>> 'n'表示相同的含义,为什么它不会直接打印n呢?


我删除了颜色的引用;这取决于您使用的确切 shell。IDLE 将对输出进行着色编码,标准终端则不会。 - Martijn Pieters
4个回答

5

您正在以交互模式运行Python解释器,该模式会将值“回显”给您。表达式会被计算,如果它们返回的不是None,那么解释器会执行以下操作:

print(repr(result))

那是你看到的打印出来的'n'。
另一方面,print() 直接将值转换为字符串(使用str()函数的结果),然后写入终端输出。但对于字符串值,它已经是一个字符串对象,所以没有区别。
这与在脚本中运行 Python 代码不同;那里没有提示符,如果你只在一行上放置 'n',Python 解释器会忽略那行,因为它不会改变任何状态。然而,print('n') 会将字符串写入控制台或终端。
交互模式可以帮助你理解 Python 表达式的作用,并且通过使用repr()函数,你可以区分不同类型的对象。尝试打印整数数字1和包含数字1的字符串 "1"
>>> print(1)
1
>>> print("1")
1

你无法区分这两个。但它们的表现确实不同:

>>> 1
1
>>> "1"
'1'

大多数Python标准类型的表示法都使用一种可以直接在您的Python代码中重用的符号。


是的,现在我明白了,所以'n'和print('n')是不同的,将'n'作为输入意味着Python打印回显值,它会“逐字地”打印我们输入的内容,而print('n')则会将n作为一个字符打印出来。 - Yagami

0

你应该首先理解在Python中,所有的东西都是对象。这意味着'n'是一个对象,当你使用print打印它时,你调用了对象'n'的一个函数(OBJECT.__str__())。

class Human:
    def __init__(self,name,ge,age):
         self.ge = ge
         self.age = age
         self.name = name
    def __str__(self):
         print "This is",self.name
         print "age = ",self.age
         print "gender = ".self.ge

boy = Human("Tom", "M", 12)
print boy

0

它只是回显您的输入(一个字符串)。当您 print n 时,它会输出您的字符串的值。


0
如果您将此内容放入.py文件中并从命令行执行,则print('n')会打印出一些内容,但在文件中只有'n'则不会有任何反应。
交互式提示符有点令人困惑,因为如果您编写的表达式具有除None之外的值,则会打印其表示形式。因此,在这种情况下,'n'打印'n'。但这是交互式提示符所做的事情,而不是代码所做的事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接