在另一个函数内部引用函数的范围

时间:2014-02-01 17:53:03

标签: python python-2.7

我想将一个函数传递给另一个函数,但是在第一个函数中使用第二个函数的作用域。我有一个javascript背景,所以我习惯于这样做:

function write(str, path) {
    // do stuff
}

function doThis(fn) {
    fn()
}

function doThisString(str, path) {
    doThis(function() {
      write(str, path)
    });
}

我怎么能在python中做到这一点?

3 个答案:

答案 0 :(得分:2)

python等价物将是。

def write (mystr, path): pass

def doThis (f): f ()

def doThisString (mystr, path):
    doThis (lambda: write (mystr, path) )

或者:

def doThisString (mystr, path):
    def function (): write (mystr, path)
    doThis (function)

答案 1 :(得分:2)

是的,Python支持闭包。但除了非常有限(只有单个表达式)lambda形式之外,函数必须在使用之前在单独的语句中定义 - 它们不能在表达式中创建。

如果您想避免嵌套函数定义以避免嵌套,可以使用functools.partial。无论如何,你的具体例子将大大简化:

from functools import partial

def doThisString(str, path):
    doThis(partial(write, str, path))

它并不总是很好,所以有时会有更好的选择。

答案 2 :(得分:0)

以下是它在python中的语法形式:

def write(text, path):
    // do stuff

def doThis(fn):
    fn()

def doThisString(text, path):
   doThis(lambda: write(text, path) )