Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Structure pour petits utilitaires

2 réponses
Avatar
Pierre Maurette
Bonjour,

Imaginons un petit utilitaire en ligne de commandes, éventuellement
wrappable dans un Tkinter. Par exemple un travail à faire sur certains
fichiers d'une arborescence.
Pour l'instant c'est "one-shot", une commande donne une action. J'ai
donc un certain nombre de fonctions "action" qui utilisent les mêmes
données. Ces données sont dans un dictionnaire, qui peut être un peu
grassouillet si j'y adjoint une liste de fichiers (de paths).
J'ai déjà résolu ça par de l'objet, ça marche sans problème. Mais dans
ce contexte ça me gonfle. Je m'explique, il n'y a pas d'objet
"naturel", hors peut-être l'application, et ça amène plus de
contraintes et de confusion que d'avantages de mon point de vue.
Certaines constantes, simples ou structurées, sont globales. Pour le
dictionnaire évoqué plus haut, je le passe en paramètre aux fonctions
"action", même si elles n'en utilisent pas toutes les données.

Ce que je voudrais c'est la confirmation de ce qui me semble évident,
c'est que ce passage de "trop" de données n'occasionne pas de perte de
performance déraisonnable.

En l'écrivant je crois que ma question est stupide, je ne vois pas
pourquoi Python gérerait au sein du même module autre chose que des
références au dictionnaires...

Bonne fin de week-end...

--
Pierre Maurette

2 réponses

Avatar
Bruno Desthuilliers
Bonjour,

Imaginons un petit utilitaire en ligne de commandes, éventuellement
wrappable dans un Tkinter. Par exemple un travail à faire sur certains
fichiers d'une arborescence.
Pour l'instant c'est "one-shot", une commande donne une action. J'ai
donc un certain nombre de fonctions "action" qui utilisent les mêmes
données. Ces données sont dans un dictionnaire, qui peut être un peu
grassouillet si j'y adjoint une liste de fichiers (de paths).
J'ai déjà résolu ça


quoi ?

par de l'objet, ça marche sans problème. Mais dans
ce contexte ça me gonfle. Je m'explique, il n'y a pas d'objet "naturel",
hors peut-être l'application,


L'écrasante majorité des objets employés dans un programme OO sont des
objets techniques. Dans ton cas, on pourrait songer à l'appli, à sa
config et aux options en ligne de commande, aux éventuels logs, et bien
sûr aux actions. Ceci étant, il n'y a aucunement lieu de vouloir tout
faire entrer dans une optique OO psychorigide à la Java - en ce qui me
concerne, tant que je n'ai pas de problème dont la solution 'naturelle'
(en Python) implique une/des classe(s) spécifique(s), je ne m'encombre
pas avec.

et ça amène plus de contraintes et de
confusion que d'avantages de mon point de vue.
Certaines constantes, simples ou structurées, sont globales. Pour le
dictionnaire évoqué plus haut, je le passe en paramètre aux fonctions
"action", même si elles n'en utilisent pas toutes les données.

Ce que je voudrais c'est la confirmation de ce qui me semble évident,
c'est que ce passage de "trop" de données n'occasionne pas de perte de
performance déraisonnable.


Si tu penses à un surcoût dû au passage du dict en paramètre, qu'il ait
une ou 5000000000 entrées ne change rien, puisqu'en Python il n'y a que
des références.

En l'écrivant je crois que ma question est stupide, je ne vois pas
pourquoi Python gérerait au sein du même module autre chose que des
références au dictionnaires...


Au sein du même module, entre modules, et quelque soit le type de
données - il n'y a pas de copie tant que tu n'en demandes pas une
explicitement.

Avatar
Pierre Maurette
Bonjour,

Imaginons un petit utilitaire en ligne de commandes, éventuellement
wrappable dans un Tkinter. Par exemple un travail à faire sur certains
fichiers d'une arborescence.
Pour l'instant c'est "one-shot", une commande donne une action. J'ai donc
un certain nombre de fonctions "action" qui utilisent les mêmes données.
Ces données sont dans un dictionnaire, qui peut être un peu grassouillet si
j'y adjoint une liste de fichiers (de paths).
J'ai déjà résolu ça


quoi ?

par de l'objet, ça marche sans problème. Mais dans ce contexte ça me
gonfle. Je m'explique, il n'y a pas d'objet "naturel", hors peut-être
l'application,


L'écrasante majorité des objets employés dans un programme OO sont des objets
techniques. Dans ton cas, on pourrait songer à l'appli, à sa config et aux
options en ligne de commande, aux éventuels logs, et bien sûr aux actions.
Ceci étant, il n'y a aucunement lieu de vouloir tout faire entrer dans une
optique OO psychorigide à la Java - en ce qui me concerne, tant que je n'ai
pas de problème dont la solution 'naturelle' (en Python) implique une/des
classe(s) spécifique(s), je ne m'encombre pas avec.

et ça amène plus de contraintes et de confusion que d'avantages de mon
point de vue.
Certaines constantes, simples ou structurées, sont globales. Pour le
dictionnaire évoqué plus haut, je le passe en paramètre aux fonctions
"action", même si elles n'en utilisent pas toutes les données.

Ce que je voudrais c'est la confirmation de ce qui me semble évident, c'est
que ce passage de "trop" de données n'occasionne pas de perte de
performance déraisonnable.


Si tu penses à un surcoût dû au passage du dict en paramètre, qu'il ait une
ou 5000000000 entrées ne change rien, puisqu'en Python il n'y a que des
références.

En l'écrivant je crois que ma question est stupide, je ne vois pas pourquoi
Python gérerait au sein du même module autre chose que des références au
dictionnaires...


Au sein du même module, entre modules, et quelque soit le type de données -
il n'y a pas de copie tant que tu n'en demandes pas une explicitement.


Merci de m'avoir rassuré...

--
Pierre Maurette