Trong khi cố gắng giải quyết vấn đề phức tạp hơn, tôi đã so sánh tốc độ truy cập với biến cục bộ so với biến thành viên.Tại sao truy cập biến cục bộ nhanh hơn truy cập thành viên lớp trong Python?
Dưới đây là một chương trình thử nghiệm:
#!/usr/bin/env python
MAX=40000000
class StressTestMember(object):
def __init__(self):
self.m = 0
def do_work(self):
self.m += 1
self.m *= 2
class StressTestLocal(object):
def __init__(self):
pass
def do_work(self):
m = 0
m += 1
m *= 2
# LOCAL access test
for i in range(MAX):
StressTestLocal().do_work()
# MEMBER access test
for i in range(MAX):
StressTestMember().do_work()
Tôi biết nó có thể trông giống như một ý tưởng tồi để nhanh chóng StressTestMember
và StressTestLocal
trên mỗi lần lặp nhưng nó có ý nghĩa trong chương trình mô hình hóa nơi đây là những cơ bản ghi Active Directory.
Sau một chuẩn mực đơn giản,
- ĐỊA PHƯƠNG kiểm tra truy cập: 0m22.836
- kiểm tra truy cập thành viên: 0m32.648s
Các phiên bản địa phương là ~ 33% nhanh hơn trong khi vẫn là một phần của một lớp học. Tại sao?
+1 Rất tốt, câu trả lời rõ ràng. – Tadeck
rất đẹp. điều này xứng đáng được chấp nhận. –
Vì vậy, nó làm theo nó sẽ là khôn ngoan để tạo một tham chiếu mới đến một biến lớp trong phạm vi địa phương? ví dụ: 'm = self.m'? Nó sẽ không tạo ra bất kỳ sự khác biệt nào trong bài kiểm tra này, nhưng phiên bản 'do_work()' của tôi là một vòng lặp chạy hàng triệu lần. –