Xét đoạn mã sau:Mô phỏng một 'tĩnh địa phương' biến trong python
def CalcSomething(a):
if CalcSomething._cache.has_key(a):
return CalcSomething._cache[a]
CalcSomething._cache[a] = ReallyCalc(a)
return CalcSomething._cache[a]
CalcSomething._cache = { }
Đây là cách đơn giản nhất tôi có thể nghĩ ra để mô phỏng một 'tĩnh địa phương' biến trong python.
gì làm tôi bực mình là CalcSomething._cache được đề cập bên ngoài định nghĩa của chức năng, nhưng thay thế sẽ là một cái gì đó như thế:
if not hasattr(CalcSomething, "_cache"):
setattr(CalcSomething, "_cache", { })
bên trong định nghĩa của chức năng, đó là thực sự cồng kềnh.
Có cách nào thanh lịch hơn không?
[EDIT]
Chỉ cần làm rõ, câu hỏi này không phải về bộ đệm chức năng cục bộ, như ví dụ trên có thể đề xuất. Dưới đây là một ví dụ ngắn khác về một 'địa phương tĩnh' có thể hữu ích:
def ParseString(s):
return ParseString._parser.parse(s)
# Create a Parser object once, which will be used for all parsings.
# Assuming a Parser object is heave on resources, for the sake of this example.
ParseString._parser = Parser()
BTW, bạn mi ght muốn đặt câu hỏi của bạn theo cách khác. Bạn không tìm kiếm biến tĩnh cục bộ, nhưng để có cách giới thiệu ghi nhớ cho hàm của bạn. –
ví dụ thứ hai của bạn tệ hơn ví dụ thứ nhất. Bạn có thể trả về datetime.datetime.strptime (dts, "% m-% d-% Y% H:% M:% S") vì strptime là một phương thức lớp tạo một đối tượng datetime mới. Có thực sự không cần một đối tượng datetime được tạo ra. – nosklo
Bạn nói đúng về ví dụ thứ hai. Thay đổi điều đó. –