Các thử nghiệm sau thất bại:Tại sao kết quả của bản đồ() và danh sách hiểu khác nhau?
#!/usr/bin/env python
def f(*args):
"""
>>> t = 1, -1
>>> f(*map(lambda i: lambda: i, t))
[1, -1]
>>> f(*(lambda: i for i in t)) # -> [-1, -1]
[1, -1]
>>> f(*[lambda: i for i in t]) # -> [-1, -1]
[1, -1]
"""
alist = [a() for a in args]
print(alist)
if __name__ == '__main__':
import doctest; doctest.testmod()
Nói cách khác:
>>> t = 1, -1
>>> args = []
>>> for i in t:
... args.append(lambda: i)
...
>>> map(lambda a: a(), args)
[-1, -1]
>>> args = []
>>> for i in t:
... args.append((lambda i: lambda: i)(i))
...
>>> map(lambda a: a(), args)
[1, -1]
>>> args = []
>>> for i in t:
... args.append(lambda i=i: i)
...
>>> map(lambda a: a(), args)
[1, -1]
Đối với những người như tôi đọc câu hỏi nhưng không nhận thấy bất kỳ vấn đề nào lúc đầu: lưu ý '[- 1, -1] '! Về cơ bản 'lambda i: ...' trong một vòng lặp không nắm bắt được giá trị hiện tại của i. –
liên quan từ Python FAQ: [Tại sao lambdas được định nghĩa trong một vòng lặp với các giá trị khác nhau tất cả trả về cùng một kết quả?] (Https://docs.python.org/3/faq/programming.html#why-do-lambdas-defined -in-a-loop-với-khác nhau-giá trị-all-return-the-cùng-kết quả) – jfs