当前位置: 首页 > 知识库问答 >
问题:

对Python中的操作符优先顺序感到困惑

邹普松
2023-03-14

1)

print("this") or True and 1/0 and print("tester")

当我将它输入到python解释器中时,我得到的输出是“this”,然后是零除法错误。但是,我引用的站点提到函数调用是第二高的优先级,所以不是应该先执行print的两个函数调用吗?我知道有短路评估,但这不是只有当你达到and、nots和OR的优先级时才会起作用吗?

2)

True>False or print("hello")
5 is 5 or 1/0

有人能解释一下我遗漏了什么,以及如何判断python将按照什么顺序执行一个逻辑表达式吗?

共有1个答案

唐声
2023-03-14

有人能解释一下我遗漏了什么,以及如何判断python将按照什么顺序执行一个逻辑表达式吗?

优先级影响解析到树时“共享”操作数的分组方式。在此之后,每个子表达式的特定求值模型将接管。

您得到的树如下所示(您可以使用AST模块获得更详细但确切的版本,并使用ASTPretty获得可读的内容):

    or
        print("this")
        and
             True
             and
                 1/0
                 print("tester")
    null
or
   >
      True
      False
   print("hello")

>

  • 计算其第一个操作数

    1. (>True False)计算为True

    是一个短路运算符,它一旦找到一个真实值并返回该值,就会立即停止,因此它永远不会进入打印

    此解析为

    or
        is
            5
            5
        /
            1
            0
    

    > 计算

    1. 求值,并返回true

  •  类似资料:
    • 问题内容: 我可以理解以下定义: 每个对象都有一个标识,一个类型和一个值。一旦创建了对象,其身份就永远不会改变。您可能会认为它是对象在内存中的地址。所述操作者比较两个对象的身份; 该函数返回一个表示其身份的整数。 我认为上面的定义在创建“某物”时起作用,例如: 但是我不理解: 我还没有创建任何东西。那么整数“ 1”如何具有ID?这是否意味着只要我在Python Shell中“提及” 1,便立即将其

    • 问题内容: 来自Java背景,我知道这类似于toString的Python版本(虽然我确实意识到Python是较老的语言)。 因此,我定义了一个小类以及一个如下的方法: 然后,我创建它的一些实例: 现在,尝试打印这些对象之一时的预期行为是将打印其关联的值。这也会发生。 产量 但是当我执行以下操作时: 接着 我懂了 我期望的地方 我想念什么?而我在做什么其他值得冒犯的东西呢?:) 问题答案: Pyt

    • 这应该是多线程上的一个简单问题:https://leetcode.com/problems/print-in-order/“同一个Foo实例将传递给三个不同的线程。线程A将调用first(),线程B将调用second(),线程C将调用third()。设计一种机制并修改程序,以确保second()在first()之后执行,third()在second()之后执行”,他们给出以下代码: **看来我可以

    • 我正在尝试提出一种解决方案,它涉及在连接操作之后应用一些逻辑,从多个中的中选择一个事件。这类似于reduce函数,但它只返回1个元素,而不是递增地返回。因此最终结果将是单个(,对,而不是一个 每个键保证只到达一次。 假设像上面这样的连接操作,它用4个生成了1个,成功地连接并收集在。现在,我想做的是,立即访问这些值,并执行一些逻辑以将正确匹配到一个。例如,对于上面的数据集,我需要(,和)。 将为每个

    • 所以我一直在读Kafka的语义学,我对它的工作原理有点困惑。 我理解生产者如何避免发送重复的消息(以防代理的ack失败),但我不明白的是,在消费者处理消息但在提交偏移量之前崩溃的情况下,一次是如何工作的。Kafka不会在这种情况下重试吗?

    • 真的很奇怪,为什么在将挂起状态更改为之后,第一个操作的位置没有改变。 打印输出: 预期打印输出: UPD只注意到的这种行为。对于具有的自定义按预期工作。