- Từ điển
some_dict
sẽ được tạo trong bộ nhớ mỗi khi hàm được gọi.
- Nó được deallocated khi hàm trả về.
- Thực sự tốn kém để tạo lại từ điển mỗi lần duy nhất mà hàm được gọi, đặc biệt nếu từ điển lớn. Thay vào đó, bạn có thể tạo từ điển trong hàm người gọi (giả sử rằng người gọi chính nó chỉ được gọi một lần) và chuyển nó làm đối số cho hàm
some_function()
.
Ví dụ, hãy xem xét các chức năng caller()
mà gọi hàm callee
(some_function()
trong câu hỏi của bạn), như trong
def caller():
callee()
Từ trường hợp sử dụng của bạn, chúng tôi muốn gọi callee()
nhiều lần, và chúng ta cần để sử dụng lại cùng một từ điển trong callee()
. Hãy chạy qua các trường hợp sử dụng bình thường.
1. Từ điển được tạo trong callee()
. Đây là ví dụ trong câu hỏi của bạn.
def caller():
for loop:
callee()
def callee(dictionary):
generate dictionary
do something with dictionary
Trong trường hợp này, mỗi lần callee()
được gọi, bạn phải tạo từ điển mới. Điều này là do ngay sau khi trả về callee()
, tất cả các biến cục bộ của nó đều được phân bổ lại. Do đó, bạn không thể "sử dụng lại" cùng một từ điển giữa các số callee()
s khác nhau.
2. Từ điển được tạo trong caller()
và được chuyển làm đối số cho callee()
.
def caller():
generate dictionary
for loop:
callee(dictionary)
def callee(dictionary):
do something with dictionary
Trong trường hợp này, bạn đang tạo ra từ điển một lần trong caller()
, và sau đó đi qua nó để mỗi callee()
chức năng duy nhất. Do đó, mỗi lần bạn gọi callee()
, bạn sẽ không cần phải tạo lại từ điển.
Từ điển được chuyển theo tham chiếu, do đó bạn không chuyển cấu trúc dữ liệu khổng lồ mỗi khi bạn gọi callee()
. Tôi sẽ không đi sâu về điều này (bạn có thể tìm thấy một lời giải thích tốt here), nhưng về bản chất, có chi phí không đáng kể để chuyển từ điển như một tham số đến callee()
.
Nguồn
2015-12-23 07:07:59
Chủ đề này có thể cung cấp cho bạn một ý tưởng ngắn gọn về vấn đề của bạn: http://stackoverflow.com/a/20819302/4515274 –
Xem thêm [Tương đương Python của biến tĩnh bên trong một hàm là gì?] (Http:// stackoverflow.com/questions/279561/what-is-the-python-equivalent-of-static-variables-inside-a-function) và các câu hỏi được liên kết trên trang đó. –