Không có vấn đề nội tại khi thiết kế mặc định của bạn thành một bộ trống rỗng không thay đổi. Tuy nhiên, nó có thể được coi là một phương pháp tiếp cận thiết kế không trực quan. Bất kỳ tham chiếu nào đến các vị trí cụ thể trong bộ túp sẽ gây ra một ngoại lệ được nêu ra. Nếu bạn cẩn thận với việc tạo kiểm tra đối số thì đây không phải là vấn đề, nhưng nếu bạn xây dựng phần còn lại của mã để mong đợi dữ liệu từ các vị trí cụ thể và không xác minh tuple trống thì điều này sẽ gây ra lỗi.
Điều đó tùy thuộc vào mục tiêu của bạn cho đối số. Một danh sách trống sẽ có các ứng dụng rõ ràng hơn cho một đối số mặc định (ít nhất là các đối tượng sửa đổi danh sách theo cách nào đó), nhưng một bộ trống không thay đổi sẽ không có bất kỳ sử dụng trực quan nào làm mặc định ngoài việc cho biết không có đối số nào được đưa ra.
Phương pháp điển hình cho các đối số mặc định sẽ được đặt chúng vào Không mà làm cho nó hoàn toàn rõ ràng khi các đối số chưa được thiết lập:
def foo(a, b=None):
Có chức năng làm bất cứ điều gì bên ngoài của 'loop for' ? – DSM
Không, tôi giả định rằng những gì bạn muốn trong hàm là một biến đổi không thể thay đổi. – Ben
Tôi có thiếu gì đó không? Cách duy nhất mà đối số mặc định sẽ được sử dụng là nếu bạn gọi thủ công 'foo' mà không có đối số, như' foo() '. Nhưng nếu bạn biết chức năng chỉ làm bất cứ điều gì nếu iterable là nonempty, tại sao bạn đã bao giờ viết rằng? – DSM