Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.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 Is`1<;2在布尔运算中即使没有关键字“not”,也要使用“not_test”?_Python_Syntax_Grammar_Lexical - Fatal编程技术网

Python Is`1<;2在布尔运算中即使没有关键字“not”,也要使用“not_test”?

Python Is`1<;2在布尔运算中即使没有关键字“not”,也要使用“not_test”?,python,syntax,grammar,lexical,Python,Syntax,Grammar,Lexical,我正在阅读Python文档2.76 : : 本文件中的符号说明如下: 现在问题来了: 是not_test::=比较|“not”not_test 非测试::=比较(“非”非测试) 如果1.为真,则有效的比较也是有效的非测试(例如1

我正在阅读Python文档2.76

:

:

本文件中的符号说明如下:

现在问题来了:

  • not_test::=比较|“not”not_test

    非测试::=比较(“非”非测试)

  • 如果
    1.
    为真,则有效的
    比较也是有效的
    测试(例如
    1<2
    测试,即使其中没有

  • 此外,由于有效的
    测试只能是单个有效的
    而不是
    1<2
    也是有效的
    测试。 这同样适用于
    或_测试

  • 那么什么是有效的
    比较
    <代码>1<2
    显然符合模式。这些位比较表达式也是有效的
    比较
    。共同点是,至少存在一个运算符(“>”,“the”*”表示包含序列的零个或多个实例。
    比较
    不需要运算符,这可以通过跟踪
    shift\u expr
    原子
    ,然后跟踪
    文字
    来显示

  • 顺序很重要,所以paren用于分组,所以不是

  • 不,因为1不是真的

  • 所以我认为你们的逻辑在这里开始崩溃。这里重要的是,这些是逻辑的陈述。不仅仅是


    因此,第一个值被赋予
    非_测试
    (通过
    或_测试
    和_测试
    ),然后第二个值被赋予
    not_test
    ,然后对它们进行比较,这将返回一个布尔值。

    除了简单地定义语言的各个部分外,形式语法还指定了优先级。这就是为什么表达式部分的许多语法节点都包含一个与实际名称不符的左手替代项节点;这些备选方案指定具有下一个最高优先级的语法节点(因此,在展开树时,将展开低优先级操作,然后展开高优先级操作)

    这在算术运算符中最为清楚:

    power ::=  primary ["**" u_expr]
    u_expr ::=  power | "-" u_expr | "+" u_expr | "~" u_expr
    m_expr ::=  u_expr | m_expr "*" u_expr | m_expr "//" u_expr | m_expr "/" u_expr
                | m_expr "%" u_expr
    a_expr ::=  m_expr | a_expr "+" m_expr | a_expr "-" m_expr
    shift_expr ::=  a_expr | shift_expr ( "<<" | ">>" ) a_expr
    
    进一步

    a_expr > m_expr > u_expr > power > primary > atom > literal > integer > decimalinteger > etc...
    

    在每个阶段,您基本上将优先级链提升一级,这为确定操作顺序提供了一种非常清晰的方法。

    让我们分析一下您的问题陈述:):

    1<2
    a
    不是测试吗?
    
    not_test:'not'not_test |比较
    #`比较:expr(comp_op expr)*`
    非测试:expr comp\u op expr
    
    #“comp|u op:”“谢谢!”!!这很有帮助!也谢谢你!要追溯到文字,这是一个漫长的过程。”
    and_expr ::=  shift_expr | and_expr "&" shift_expr
    xor_expr ::=  and_expr | xor_expr "^" and_expr
    or_expr  ::=  xor_expr | or_expr "|" xor_expr
    
    power ::=  primary ["**" u_expr]
    u_expr ::=  power | "-" u_expr | "+" u_expr | "~" u_expr
    m_expr ::=  u_expr | m_expr "*" u_expr | m_expr "//" u_expr | m_expr "/" u_expr
                | m_expr "%" u_expr
    a_expr ::=  m_expr | a_expr "+" m_expr | a_expr "-" m_expr
    shift_expr ::=  a_expr | shift_expr ( "<<" | ">>" ) a_expr
    
    comparison > or_expr > xor_expr > and_expr > shift_expr > a_expr > a_expr + m_expr
    
    a_expr > m_expr > u_expr > power > primary > atom > literal > integer > decimalinteger > etc...
    
    not_test: 'not' not_test | comparison
    
    # `comparison: expr (comp_op expr)*`
    not_test: expr comp_op expr
    
    # `comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'`
    not_test: expr < expr
    
    # `expr: xor_expr ('|' xor_expr)*`
    not_test: xor_expr < xor_expr
    
    # `xor_expr: and_expr ('^' and_expr)*`
    not_test: and_expr < and_expr
    
    # `and_expr: shift_expr ('&' shift_expr)*`
    not_test: shift_expr < shift_expr
    
    # shift_expr: arith_expr (('<<'|'>>') arith_expr)*
    not_test: arith_expr < arith_expr
    
    # arith_expr: term (('+'|'-') term)*
    not_test: term < term
    
    # term: factor (('*'|'/'|'%'|'//') factor)*
    not_test: factor < factor
    
    # factor: ('+'|'-'|'~') factor | power
    not_test: power < power
    
    # power: atom trailer* ['**' factor]
    not_test: atom < atom
    
    #atom: ('(' [yield_expr|testlist_comp] ')' |
    #       '[' [listmaker] ']' |
    #       '{' [dictorsetmaker] '}' |
    #       '`' testlist1 '`' |
    #       NAME | NUMBER | STRING+)
    not_test: NUMBER < NUMBER
    not_test: 1 < 2