为什么使用无语法的字符串或整数不会抛出语法错误?
我真的一定会错过一些东西。
所以我有这个很好的语法。
"Hello darling" #THIS!
print "Hello world!"
为什么你好亲爱的不会抛出语法错误。 我的意思是,没有print
声明。 “Hello world”就在那里。 从语法突出来看,hello world是一个字符串,而不是注释。
这也适用。
7
print "8"
而7显然是一个整数。 7只是坐在那里,没有引用一个变量,就在那里。 “Syntaxless”
问题:为什么它有效? 7和“Hello Darling”都是整数和字符串,但不是注释。 我的意思是,如果这是一个评论,那么它会让口译人员忽略评论,但事实并非如此。
这是因为你正在创建这些字符串或整数,然后不将它们分配给任何变量,所以python在创建它们后就简单地丢弃它们。
例如,当你有
a = 5
python创建int 5,然后将其分配给变量a
。 但是,如果你有
5
python创建int 5,但不存储在任何地方。 字符串也是一样。 在语法上,它是有效的。 从语义上讲,这是一个完全的浪费。
希望有所帮助
您只创建了一个名为"Hello Darling"
的字符串,这是可以的(除非浪费),因为在执行打印命令"Hello World"
后会抛出该字符串。
仅当您尝试运行的代码包含错误时才会引发语法错误,这意味着Python解释器无法知道要运行的代码。 结束丢弃结果的代码不是语法错误。
在你的情况下,你指定了完全正确的语法。 行中没有错误。 Python不关心他们是否没有做任何事情。
两者都产生可执行代码,两者都会导致产生一个对象(一个str
或int
)的表达式,然后这个对象不会被使用并最终被丢弃。
请注意,Python对于一行上的字符串具有特定的用途,如果它位于函数,类或模块的开头。 然后使用该字符串,它被指定为文档字符串:
def foo():
"I am a docstring"
return 'bar'
print foo.__doc__
# prints I am a docstring
在CPython(参考Python实现)中,它们自己在一行中未使用的文字表达式会被简单地优化掉。 你的"Hello darling"
和7
行永远不会将它编入已编译的字节码中。
上一篇: Why having a syntaxless string or integer doesn't throw syntax error?