2010-06-21 20 views
8

Tôi có một phương pháp:Python: Bất kỳ cách nào để khai báo các tham số không đổi?

def foo(bar): 
    # ... 

Có cách nào để đánh dấu bar như không đổi? Chẳng hạn như "Giá trị trong bar không thể thay đổi" hoặc "Đối tượng được trỏ đến bởi bar không thể thay đổi".

+0

Tham chiếu luôn là 'const', nhưng giá trị không (bạn không thể thay đổi' bar' trỏ tới, nhưng nếu 'bar' có thể thay đổi thì bạn vẫn có thể thay đổi 'giá trị'). Tất nhiên, đây không phải là * thực sự * đúng, vì bạn có thể so sánh với khung ngăn xếp của bố mẹ bạn và thay đổi những gì 'bar' trỏ đến, nhưng giả sử bạn không dùng đến loại hack như vậy mà quy tắc thường áp dụng. –

+1

@NickBastin: Wha? 'bar =" đã thay đổi! "' - Tôi vừa thay đổi 'bar' 'điểm' thành (được gán cho, là đúng). –

+0

@EthanFurman: Không chính xác. Quan điểm của tôi là bạn không thể thay đổi tham chiếu 'bar' trong khung stack cha - bạn có thể gán tên' bar' cục bộ để ẩn đối tượng bạn đã truyền vào, nhưng đối tượng đó vẫn tồn tại và vẫn không thay đổi trong cha mẹ. –

Trả lời

5

Nếu thanh là đối tượng không thể sửa đổi, thanh sẽ không thay đổi trong suốt chức năng.

Bạn cũng có thể tạo đối tượng cố định của riêng mình. The recipie here.

+0

Lưu ý rằng việc chặn các sửa đổi không giải quyết được vấn đề. Làm thế nào để bạn biết rằng mã máy khách sẽ không gặp phải một ConstError? Chỉ với thử nghiệm đầy đủ. –

+0

'bar = 0' - Tôi vừa thay đổi thanh (đối tượng gốc mà' thanh' được gán cho vẫn không bị ảnh hưởng). –

-2

No.

Vấn đề là gì? Nếu bạn đang viết hàm, có phải là tối đa bạn để đảm bảo bar không thay đổi? Hoặc nếu bạn đang gọi hàm, ai quan tâm?

+0

Nó thường là một vấn đề hữu ích của chính sách - bạn đang thông báo cho người dùng về một giới hạn chức năng của bạn. Tất nhiên, điều này không có ý nghĩa nhiều trong Python vì không có nguyên mẫu, và không có trình biên dịch tĩnh để thực thi ràng buộc. –

+7

Vấn đề là giúp người lập trình tránh phạm sai lầm, đến mức có thể. Nếu không, tất cả chúng ta sẽ viết tất cả mọi thứ trong hội đồng. –

+0

@Jeremy Friesner: Trong Python, cách "đúng" để làm điều này là chỉ cần viết bình luận sau đó. – carl

Các vấn đề liên quan