def lite(a,b,c):
#...
def big(func): # func = callable()
#...
#main
big(lite(1,2,3))
cách thực hiện việc này?
theo cách nào để truyền hàm với các tham số cho một hàm khác?Python: chuyển hàm có tham số làm tham số
def lite(a,b,c):
#...
def big(func): # func = callable()
#...
#main
big(lite(1,2,3))
cách thực hiện việc này?
theo cách nào để truyền hàm với các tham số cho một hàm khác?Python: chuyển hàm có tham số làm tham số
Tại sao không làm:
big(lite, (1, 2, 3))
?
Sau đó, bạn có thể làm:
def big(func, args):
func(*args)
import functools
#main
big(functools.partial(lite, 1,2,3))
Không Bằng cách này, bạn đang đi qua để lớn giá trị trả về của Lite function().
Bạn nên làm điều gì đó như:
def lite(a, b, c):
return a + b + c
def big(func, arg):
print func(arg[0], arg[1], arg[2])
big(lite, (1, 2, 3))
Đây là cách giải nén tuple dành cho - xem câu trả lời của tôi. – Skilldrick
vấn đề tương tự thường được khắc phục theo hai cách:
Xem ví dụ:
#!/usr/bin/python
def lite(a,b,c):
return "%r,%r,%r" % (a,b,c)
def big(func): # func = callable()
print func()
def big2(func): # func = callable with one argument
print func("anything")
def main():
param1 = 1
param2 = 2
param3 = 3
big2(lambda x: lite(param1, param2, param3))
def lite_with_params():
return lite(param1,param2,param3)
big(lite_with_params)
main()
bạn thậm chí có thể làm 'lớn (lite, 1, 2, 3)' và 'def lớn (func, * args): func (* args)' –
Đó là tốt đẹp nếu bạn có thể (và muốn) thay đổi 'big', và' lite' có một chữ ký cố định. Nhưng đôi khi một hoặc cả hai là bên ngoài. Trong trường hợp đó, phương thức của Teddy ('partial') là tổng quát hơn nhiều. – Mark