Penso che dipenda davvero dalla lingua e dalla funzione. Mentre i compilatori c e c ++ possono incorporare molte funzioni, questo non è il caso di Python o Java.
Anche se non conosco i dettagli specifici di Java (tranne per il fatto che ogni metodo è virtuale, ma ti consiglio di controllare meglio la documentazione), in Python sono sicuro che non ci siano allineamenti, nessuna ottimizzazione di ricorsione della coda e chiamate di funzioni sono piuttosto costose.
Le funzioni di Python sono fondamentalmente oggetti eseguibili (e infatti puoi anche definire il metodo call () per rendere un'istanza di oggetto una funzione). Ciò significa che c'è un sacco di spese generali nel chiamarli ...
MA
quando si definiscono variabili all'interno delle funzioni, l'interprete utilizza LOADFAST invece delle normali istruzioni LOAD nel bytecode, rendendo più veloce il codice ...
Un'altra cosa è che quando si definisce un oggetto richiamabile, sono possibili modelli come la memoizzazione che possono velocizzare molto il calcolo (a costo di utilizzare più memoria). Fondamentalmente è sempre un compromesso. Il costo delle chiamate di funzione dipende anche dai parametri, perché determinano quanta roba devi effettivamente copiare nello stack (quindi in c / c ++ è pratica comune passare grandi parametri come strutture tramite puntatori / riferimenti anziché per valore).
Penso che la tua domanda sia in pratica troppo ampia per poter rispondere completamente su stackexchange.
Quello che ti suggerisco di fare è iniziare con una lingua e studiare la documentazione avanzata per capire come le chiamate di funzione sono implementate da quella lingua specifica.
Rimarrai sorpreso da quante cose imparerai in questo processo.
Se hai un problema specifico, esegui misurazioni / profilazione e decidi che tempo è meglio creare una funzione o copiare / incollare il codice equivalente.
se fai una domanda più specifica, penso che sarebbe più facile ottenere una risposta più specifica.