除了乘法和求幂之外,星号在 Python 中还有什么作用? [复制]

2023-11-21

在 Peter Norvig 的用 Python 编写的 Lisp 解释器中(http://norvig.com/lispy.html),他定义了 Lispeval如下:

def eval(x, env=global_env):
    "Evaluate an expression in an environment."
    if isa(x, Symbol):             # variable reference
        return env.find(x)[x]
    elif not isa(x, list):         # constant literal
        return x                
    elif x[0] == 'quote':          # (quote exp)
        (_, exp) = x
        return exp
    elif x[0] == 'if':             # (if test conseq alt)
        (_, test, conseq, alt) = x
        return eval((conseq if eval(test, env) else alt), env)
    elif x[0] == 'set!':           # (set! var exp)
        (_, var, exp) = x
        env.find(var)[var] = eval(exp, env)
    elif x[0] == 'define':         # (define var exp)
        (_, var, exp) = x
        env[var] = eval(exp, env)
    elif x[0] == 'lambda':         # (lambda (var*) exp)
        (_, vars, exp) = x
        return lambda *args: eval(exp, Env(vars, args, env))
    elif x[0] == 'begin':          # (begin exp*)
        for exp in x[1:]:
            val = eval(exp, env)
        return val
    else:                          # (proc exp*)
        exps = [eval(exp, env) for exp in x]
        proc = exps.pop(0)
        return proc(*exps)

isa = isinstance

Symbol = str

这句话让我特别感兴趣:

return proc(*exps)

from of 中的星号是什么exps究竟在做什么?


它解压参数

function(1,2,3)  ==  function(*[1,2,3])

它使得使用变量传递给函数变得容易

args = [1,2,3]
func(*args) #much nicer than func(args[0],args[1],args[2],...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

除了乘法和求幂之外,星号在 Python 中还有什么作用? [复制] 的相关文章

随机推荐