绑定函数内的对象值(闭包)

Lan*_*aru 3 python closures sml

在SML(我在Python之前学过的函数式编程语言)中,我可以执行以下操作:

val x = 3;
fun f() = x;
f();
>>> 3
val x = 7;
f();
>>> 3
Run Code Online (Sandbox Code Playgroud)

但是,在Python中,第一个调用将给出3,第二个调用将给出7.

x = 3
def f(): return x
f()
>>> 3
x = 7
f()
>>> 7
Run Code Online (Sandbox Code Playgroud)

如何将变量的值绑定到Python中的函数?

mgi*_*son 7

您可以使用关键字参数:

x = 3
def f( x=x ): 
    return x

x = 7
f()  # 3
Run Code Online (Sandbox Code Playgroud)

创建函数时会分配关键字参数.运行该函数时,在函数的作用域中查找其他变量.(如果在函数的作用域中找不到它们,python会查找包含函数等的作用域中的变量等).