Python 3是否盡可能在內置函式中實作短路,就像它對布爾陳述句所做的那樣?
一個具體的例子,看下面的代碼片段:
min((20,11), key = lambda x : x % 10) # 20
Python是否事先評估作為鍵引數傳遞的函式的最小值為0,因此在評估傳遞的可迭代(20)中的第一個整數后立即停止,因為20%10等于0?或者它是否必須在回傳答案之前評估迭代中的所有元素?
我想短路甚至不總是可能的,尤其是對于更復雜的函式,但是對于眾所周知的內置函式或運算子,比如%呢?
我在官方檔案中找不到答案。
謝謝,
uj5u.com熱心網友回復:
python 必須評估可迭代物件中的所有值,因為 languaje 逐個元素地評估元素,如果您的元組中有一些不是數字的東西,它將在嘗試執行 % 操作時觸發例外。Python 無法猜測串列中的內容。您可以通過定義一個函式而不是 lambda 并在其中設定除錯點來測驗這一點。
def my_mod(x):
import ipdb; ipdb.set_trace()
return x % 20
然后呼叫函式
min((20,11), key = my_mod)
你可以做一個快速的錯誤測驗用例
min((20,11, "s"), key = my_mod)
它將觸發例外,但首先必須評估串列中的所有先前元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/473604.html
標籤:python-3.x 功能 布尔逻辑 内置
下一篇:回應中的Django模型默認值
