Tôi nghĩ rằng nó thực sự phụ thuộc vào ngôn ngữ và chức năng. Mặc dù trình biên dịch c và c ++ có thể nội tuyến rất nhiều hàm, nhưng đây không phải là trường hợp của Python hay Java.
Mặc dù tôi không biết chi tiết cụ thể cho java (ngoại trừ mọi phương thức đều là ảo nhưng tôi khuyên bạn nên kiểm tra tài liệu tốt hơn), trong Python tôi chắc chắn rằng không có nội tuyến, không có tối ưu hóa đệ quy đuôi và các lệnh gọi hàm khá tốn kém.
Các hàm Python về cơ bản là các đối tượng thực thi (và nguyên vẹn, bạn cũng có thể định nghĩa phương thức call () để tạo một đối tượng đối tượng thành một hàm). Điều này có nghĩa là có khá nhiều chi phí để gọi họ ...
NHƯNG
khi bạn xác định các biến bên trong các hàm, trình thông dịch sử dụng LOADFAST thay vì lệnh LOAD thông thường trong mã byte, làm cho mã của bạn nhanh hơn ...
Một điều nữa là khi bạn xác định một đối tượng có thể gọi được, các mẫu như ghi nhớ là có thể và chúng có thể tăng tốc hiệu quả tính toán của bạn rất nhiều (với chi phí sử dụng nhiều bộ nhớ hơn). Về cơ bản nó luôn luôn là một sự đánh đổi. Chi phí cuộc gọi chức năng cũng phụ thuộc vào các tham số, bởi vì chúng xác định số lượng thực sự bạn phải sao chép trên ngăn xếp (do đó, trong c / c ++, thông thường là truyền các tham số lớn như cấu trúc bằng con trỏ / tham chiếu thay vì theo giá trị).
Tôi nghĩ rằng câu hỏi của bạn trong thực tế quá rộng để được trả lời hoàn toàn trên stackexchange.
Những gì tôi khuyên bạn nên làm là bắt đầu với một ngôn ngữ và nghiên cứu tài liệu nâng cao để hiểu cách gọi hàm được thực hiện bởi ngôn ngữ cụ thể đó.
Bạn sẽ ngạc nhiên bởi có bao nhiêu điều bạn sẽ học được trong quá trình này.
Nếu bạn có một vấn đề cụ thể, hãy thực hiện các phép đo / định hình và quyết định thời tiết, tốt hơn là tạo một hàm hoặc sao chép / dán mã tương đương.
Nếu bạn hỏi một câu hỏi cụ thể hơn, tôi nghĩ sẽ dễ dàng hơn để có được câu trả lời cụ thể hơn.