Python 中發生了什么使以下內容有所不同?
>>> one = 1
>>> one is not False
True
>>> one is (not False)
False
簡單地考慮not否定它之后的內容,我會認為它們都具有與第二個相同的輸出。發生了什么讓它們變得不同?第一個示例的“操作順序”是什么?
uj5u.com熱心網友回復:
您可以使用該ast模塊查看 Python 如何以不同的方式決議這兩者。
在第一種情況下,決議器將其識別is not為單個(雙字)運算子,運算元為one和False。
>>> print(ast.dump(ast.parse("one is not False"), indent=4))
Module(
body=[
Expr(
value=Compare(
left=Name(id='one', ctx=Load()),
ops=[
IsNot()],
comparators=[
Constant(value=False)]))],
type_ignores=[])
在第二種情況下,決議器將其識別is為單個(單字)運算子,其運算元為one和not False。
>>> print(ast.dump(ast.parse("one is (not False)"), indent=4))
Module(
body=[
Expr(
value=Compare(
left=Name(id='one', ctx=Load()),
ops=[
Is()],
comparators=[
UnaryOp(
op=Not(),
operand=Constant(value=False))]))],
type_ignores=[])
uj5u.com熱心網友回復:
第一個實體詢問是否one不是 False,因為“one”是 1,所以結果為 True。在這里,is not充當自己的運算子。
第二個實體詢問 if oneis (not False)which 與詢問 if 相同one is True,但one不是 True 它是 1。這里,是not修改FalseTrue
請記住,is這與==.
例如1 == True為真,但1 is True為假。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/478851.html
標籤:Python
上一篇:深度串列計數-計算串列中的串列
