Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果在打印后添加冒号,为什么解释器不会抛出错误?_Python_Python 3.x_Syntax Error - Fatal编程技术网

Python 如果在打印后添加冒号,为什么解释器不会抛出错误?

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"

我在打印后添加了冒号和分号,但解释器并没有抛出错误

请使用python3.8.x(编辑)运行


解释器认为冒号是类型注释。这就是为什么它在早期版本的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")