在javascript中,我可以执行以下操作:
var some = 100;
var param1 = 1;
func1(param1, function(res1) {
var param2 = res1 + some;
func2(param2, function(res2) {
// ...
});
});
在php中:
$some = 100;
$param1 = 1;
func1($param1, function($res1) use ($some) {
$param2 = $res1 + $some;
func2($param2, function($res2) {
// ...
});
});
我怎样才能在python中做同样的事情?
...............................................
答案 0 :(得分:3)
将函数作为参数传递。
some = 100
def callback1(res1):
param2 = res1 + some
func2(param2, callback2)
def callback2(res2):
...
param1 = 1
func1(param1, callback1)
答案 1 :(得分:2)
我看到你也标记了asynchronous
。 Python不是asynchronous
。但是python函数也是javascript和php之类的第一类对象。所以,你也可以在python中做同样的事情。
def func1(data, nextFunction = None):
print data
if nextFunction:
nextFunction()
def func(data, nextFunction = None):
print data
nextFunction(data * 10)
func(1, func1)
<强>输出强>
1
10
内联函数定义在python中受到限制,但仍可以使用lambda
函数。例如,
data = ["abcd", "abc", "ab", "a"]
print sorted(data, key = lambda x: len(x)) # Succinctly written as key = len
<强>输出强>
['a', 'ab', 'abc', 'abcd']
答案 2 :(得分:1)
函数是Python中的第一类对象,您也可以嵌套它们。
EG:
#!/usr/local/cpython-3.3/bin/python
some = 100
param1 = 1
def func1(param1, function):
param2 = res1 + some;
def func2(param2, function):
pass
func2(param2, function)
答案 3 :(得分:1)
装饰器只是“可以在另一个函数之前和之后执行任意代码的东西”的语法包装。这就是你用回调做的事情,嘿:flat比嵌套要好。
def func1(fn):
def wrapped(arg):
return fn(arg+1)
return wrapped
def func2(fn):
def wrapped(arg):
return fn(arg+2)
return wrapped
@func1
@func2
def func3(x):
return x + 3
print(func3(1))
#prints 7