Python 如果在打印后添加冒号,为什么解释器不会抛出错误?
我在打印后添加了冒号和分号,但解释器并没有抛出错误 请使用python3.8.x(编辑)运行Python 如果在打印后添加冒号,为什么解释器不会抛出错误?,python,python-3.x,syntax-error,Python,Python 3.x,Syntax Error,我在打印后添加了冒号和分号,但解释器并没有抛出错误 请使用python3.8.x(编辑)运行 解释器认为冒号是类型注释。这就是为什么它在早期版本的Python中会引发SyntaxError,但实际上是 在Python的更高版本中,这是有效的 a: int 就这样 import sys def exclaim(string): sys.stdout.write(f"{string}!") print = exclaim print("Hello"
解释器认为冒号是类型注释。这就是为什么它在早期版本的Python中会引发
SyntaxError
,但实际上是
在Python的更高版本中,这是有效的
a: int
就这样
import sys
def exclaim(string):
sys.stdout.write(f"{string}!")
print = exclaim
print("Hello")
也就是说,您可以对变量的类型进行注释。您可以重新分配打印
因此,当您执行print:(x)
时,解释器只是认为您将print
注释为“type”5
分号是有效的Python,用于将两个单独的语句放在同一行上。他们只是被认为是“非音速的”。你有时会看到它们被用来做一些事情,比如importpdb;pdb.set_trace()
用于打印;(x)
,解释器将其视为两个不同的语句,print
和(x)
。解释器打印出“”和“5”。打印功能是一个内置功能。x设置为5,所以它也会打印出5。
print:(x)
是一种类型注释,如@Batman的答案所述print;(x)
是一个未调用的函数,后跟一个括号表达式。因为它实际上不是一个错误。您希望出现什么样的错误?分号:但为什么?根据这一点,它应该看起来像my\u var:int
。为什么它仍然认为它是有效的?在3.5中,它在函数定义中起作用,但它本身不起作用;也许是3中的一个错误。5@Pat-笑我在3.7.5中得到了相同的结果。不完全是:print:(int)
会用int注释。print:(x)
用“5”注释它。@wim是的,很好。已编辑。您能解释一下它是如何有效的类型批注的吗print
可能是my\u var:int
中的my\u var
,但是(x)
如何表示类型?这是一种表达……印刷;(x) 没有像你上面提到的那样在python3.8中打印任何东西…@RatnapalShende我说它在解释器中打印出来。明白了!谢谢你的宝贵时间@RatnapalShende,这是因为“print”返回“”而“x”返回5。解释器被要求打印您给它的任何语句的值。如果从文件运行,则不会发生这种情况。
import sys
def exclaim(string):
sys.stdout.write(f"{string}!")
print = exclaim
print("Hello")