簡體   English   中英

Python的表達評估機制

[英]Expression evaluation mechanism of Python

我曾經相信對於Python表達式f(g)(x) ,評估過程是:

  1. 評估f(g) ,返回函數h
  2. 評估h(x) ,返回最終結果。

但是下面的代碼表明這是不正確的:

def double(x):
    return 2 * x

def double_or_zero(f):
    def f_or_zero(x):
        if x > 0:
            return f(x)
        else:
            return -999
    return f_or_zero

print(double_or_zero(double)(3))
print(double_or_zero(double)(-3))

當評估了第一部分(如果存在) double_or_zero(double) ,它可以在下一步中 “看到”參數( 3-3 ),這表明從左到右的評估模型不正確。

那么,Python(2.x和3.x)的表達式評估機制是什么?

更新

感謝Bi Rico的回答,Python嚴格從左到右評估表達式。 希望下面的代碼可以使它更清晰:

def double(x):
    return 2 * x

def f_or_zero(this_f):
    def this_f_or_zero(x):
        print('I am running with x = %s' % x)
        if x > 0:
            return this_f(x)
        else:
            return -999
    print('I am created: %s' % this_f_or_zero)
    return this_f_or_zero

double_or_zero = f_or_zero(double)
print(double_or_zero(3))
print(double_or_zero(-3))

運行:

$ python demo.py
I am created: <function this_f_or_zero at 0x7f9f53786500>
I am running with x = 3
6
I am running with x = -3
-999

為什么您認為在評估第一部分時python可以看到該參數,但為什么看不到。 這個例子可能使事情變得更清楚。 您的示例以相同的方式工作。

def double(x):
    return 2 * x

def f_or_zero(this_f):
    def this_f_or_zero(x):
        if x > 0:
            return this_f(x)
        else:
            return 0
    return this_f_or_zero


double_or_zero = f_or_zero(double)
print(double_or_zero(3))
print(double_or_zero(-3))

double_or_zero是一個函數,其行為(大部分)與任何其他python函數類似。 碰巧的是,該函數是動態創建的,並通過調用另一個函數返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM