标签: short-circuit-evaluation

有人可以解释一下为什么“运算符优先级”适用于 javaScript 中的“||”、“&&”等逻辑运算符

有人能解释一下为什么运算符优先级适用于 JavaScript 中的||和等逻辑运算符&&吗?这在以下操作中意味着什么:

真|| 假&&假

thefalse && false被首先计算,因为&&运算符比||JavaScript 中的运算符具有更高的优先级。据我所知false && false,JavaScript 引擎不会评估它,因为在 || 之前 运算符有一个true文字,当某些东西true||运算符之前,运算符之后的东西||将不会被评估,这在 JavaScript 中被称为“逻辑运算符的短路”,另一个例子是:

真|| 警报()

即使函数调用的优先级高于||运算符,函数调用也永远不会发生,另一个例子是

真|| x = 7

如果在 JavaScript 中逻辑运算符的短路是真的,那么上面的代码不能给出错误,因为x = 7没有被计算,因为在||运算符之前有一个true文字。

javascript operator-precedence short-circuiting logical-operators short-circuit-evaluation

3
推荐指数
1
解决办法
150
查看次数

PySpark 是否支持条件语句的短路计算?

我想在我的数据框中创建一个新的布尔列,该列从同一数据框中其他列上的两个条件语句的评估中得出其值:

columns = ["id", "color_one", "color_two"]
data = spark.createDataFrame([(1, "blue", "red"), (2, "red", None)]).toDF(*columns)

data = data.withColumn('is_red', data.color_one.contains("red") | data.color_two.contains("red"))
Run Code Online (Sandbox Code Playgroud)

除非color_onecolor_two连续为 NULL,否则这工作正常。在此类情况下,该行is_red也设置NULL为而不是trueor false

+-------+----------+------------+-------+
|id     |color_one |color_two   |is_red |
+-------+----------+------------+-------+
|      1|      blue|         red|   true|
|      2|       red|        NULL|   NULL|
+-------+----------+------------+-------+
Run Code Online (Sandbox Code Playgroud)

这意味着如果第一个条件恰好为真(如上面示例的第 2 行),PySpark 正在评估条件语句的所有子句,而不是提前退出(通过短路评估)。

PySpark 是否支持条件语句的短路计算?

与此同时,这是我想出的一种解决方法,用于对每一列进行空检查:

from pyspark.sql import functions as F

color_one_is_null = data.color_one.isNull()
color_two_is_null = data.color_two.isNull()
data = data.withColumn('is_red', F.when(color_two_is_null, data.color_one.contains("red"))
                                  .otherwise(F.when(color_one_is_null, data.color_two.contains("red"))
                                              .otherwise(F.when(color_one_is_null …
Run Code Online (Sandbox Code Playgroud)

python evaluation boolean pyspark short-circuit-evaluation

2
推荐指数
1
解决办法
1105
查看次数