所以这是一个关于问题缩进引入歧义的问题,而不是not
的问题。
==============原始问题==============
我正在使用Visual Studio。基本上这是我遇到的简化示例:
class sample():
def __init__(self):
self.xData = [0]
self.yData = [0]
def trySomething(self, x = [], y = []):
if not x: x = self.xData; if not y: y = self.yData
#BlaBlaBla
这里我想检查x和y是否有输入,如果没有,则使用类本身的变量。但是,无法运行,if not y:
会突出显示Unexpected token 'not'
的红色挥动线,如下所示:
有线的事情是,一旦我将它分成另一行,事情就会得到解决:
class sample():
def __init__(self):
self.xData = [0]
self.yData = [0]
def trySomething(self, x = [], y = []):
if not x: x = self.xData;
if not y: y = self.yData
#BlaBlaBla
那么将它们一起写成一行有什么不对?或者是Visual Studio的某种错误?
答案 0 :(得分:4)
歧义。你的意思是哪一个?
)3
或
if not x:
x = self.xData
if not y:
y = self.yData
以下是更多详情:https://docs.python.org/3/reference/compound_stmts.html
TLDR在这种情况下,不要使用 if not x:
x = self.xData
if not y:
y = self.yData
答案 1 :(得分:2)
这是合乎逻辑的。如果您编写词汇范围(如if
),甚至<分号后的 ,则仍在if
例如:
>>> if False: print('a'); print('b')
...
>>>
(什么都不打印)
所以:
if False: print('a'); print('b')
等同于:
if False:
print('a')
print('b') # also under the if
由于引入新的范围使得它非常难以理解,因此Python中不允许使用该语法。它会造成暧昧。
所以你写的陈述不正确:你会在if not y
下设置if not x
,这不是你的意思。