En python, si j'ai une fonction récursive qui modifie une liste d'entiers, et suppose que la liste est grande, ce qui est plus rapide à faire: garder la liste comme variable globale, et ne pas la passer comme argument comme un argument et ne le rend pas global?Quoi de plus rapide, de récursivité ou de variables globales?
Répondre
Les listes sont transmises par adresse, donc un surcoût supplémentaire est juste un paramètre de fonction unique (pointeur). Je ne pense pas que ce soit perceptible.
Vous devez vous tester, mais je serais surpris si ce serait important.
Python passe les références par valeur pour * tout * de toute façon (ex: il n'y a pas de valeur par défaut en Python) – NullUserException
Passer des types immuables finit par ressembler à une valeur de transfert, puisque les changements effectués dans la fonction n'affectent pas la valeur dans l'appelant. – PaulMcG
@PaulMcGuire Eh bien, quand vous avez un type immuable, vous * ne pouvez pas * apporter des modifications à l'objet par définition. Je suppose que le comportement que vous décrivez est quelque chose comme 'def fun (x): x =
Pour un code rapide et propre, vous devez utiliser une approche itérative de la récursivité (dans la mesure où il n'y a pas d'alternative algorithmique) avec une pile personnalisée, au lieu de globales.
Si la liste est transmise par référence et non dupliquée dans la fonction récursive, alors la différence de performance sera négligeable, et vous devrez utiliser n'importe quelle méthode pour obtenir un code plus clair et plus maintenable. Habituellement, cela passerait le tableau en paramètre, mais pas toujours.
- 1. Récursivité utilisant uniquement des variables globales
- 2. quoi de plus rapide, sélectionner plusieurs lignes ou plusieurs colonnes?
- 3. Quoi de plus rapide: si déclaration ou opérateur conditionnel? (C#)
- 4. Quoi de plus rapide? Structure tableau ou DataTable
- 5. MySQL Math - quoi de plus rapide, INTEGER ou FLOAT?
- 6. Création d'objets .NET, quoi de plus rapide?
- 7. Utiliser requirejs signifie plus de variables globales?
- 8. Quoi de plus cher? Affectation ou déclaration?
- 9. Variables de session ou globales en HTML
- 10. Variables de titre globales
- 11. Utilisation de variables globales
- 12. Définition de variables globales
- 13. Nombre de variables globales
- 14. Quoi de plus rapide/plus efficace: suppression continue OU mise à jour continue + suppression intermittente?
- 15. Virtual vs Interface poco, quoi de plus rapide?
- 16. Pourquoi la récursivité de hachage est-elle plus rapide que la récursivité lambda?
- 17. Optimisation de l'initialisation des variables globales
- 18. Utilisation de variables publiques globales
- 19. Quoi de plus efficace i ++ ou ++ i?
- 20. Déclaration de variables statiques globales
- 21. Quoi de plus rapide de créer une table temporaire ou UNION ALL?
- 22. Méthodes statiques ou non? Variables globales?
- 23. Google Maps API - JavaScript vs Flash - quoi de plus rapide?
- 24. Confusion de variables globales Python
- 25. Portée de visibilité - variables globales
- 26. Stockage de variables globales GCC
- 27. Django, variables de modèle globales
- 28. Variables globales, Javascript
- 29. Quoi de plus cher, de comparaison ou de mission?
- 30. Variables globales?
Pouvez-vous montrer la fonction? – mgilson
En cas de doute, chronométrez avec 'timeit'. –
Avez-vous essayé de profiler les deux? –