我想将一个函数传递给另一个函数,但是在第一个函数中使用第二个函数的作用域。我有一个javascript背景,所以我习惯于这样做:
function write(str, path) {
// do stuff
}
function doThis(fn) {
fn()
}
function doThisString(str, path) {
doThis(function() {
write(str, path)
});
}
我怎么能在python中做到这一点?
答案 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) )