Lỗi phổ biến là đặt đối tượng có thể thay đổi làm giá trị mặc định của đối số trong hàm. Dưới đây là một ví dụ lấy từ this excellent write-up by David Goodger:Sử dụng tốt cho các giá trị mặc định của đối số hàm có thể thay đổi được không?
>>> def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
>>> print bad_append('one')
['one']
>>> print bad_append('two')
['one', 'two']
Lời giải thích lý do tại sao điều này xảy ra là here.
Và bây giờ cho câu hỏi của tôi: Có trường hợp sử dụng tốt cho cú pháp này không?
Ý tôi là, nếu tất cả mọi người gặp phải lỗi đó, hãy gỡ lỗi, hiểu vấn đề và từ đó cố gắng tránh vấn đề, thì sử dụng cú pháp đó là gì?
Xem http: // stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument – sdolan
Lời giải thích tốt nhất mà tôi biết cho điều này là trong câu hỏi được liên kết: các hàm là các đối tượng hạng nhất, giống như các lớp. Các lớp có dữ liệu thuộc tính có thể thay đổi; các hàm có giá trị mặc định có thể thay đổi. – katrielalex
http: // stackoverflow.com/questions/2639915/why-the-mutable-default-argument-fix-syntax-là-so-ugly-ask-python-newbie – katrielalex