Une déclaration with
ne crée pas un champ (comme if
, for
et while
ne crée pas de portée non plus). En conséquence, Python va analyser le code et voir que vous avez fait une affectation dans l'instruction with
, et ainsi rendre la variable locale (à la portée réelle).
Dans les variables Python ne ont pas besoin initialisation dans tous les chemins de code: en tant que programmeur, vous êtes responsable de vous assurer qu'une variable est affectée avant qu'il ne soit utilisé. Cela peut entraîner un code plus court: disons par exemple que vous savez avec certitude qu'une liste contient au moins un élément, alors vous pouvez l'assigner dans une boucle for
. En Java, l'affectation dans une boucle for
n'est pas considérée comme sûre (puisqu'il est possible que le corps de la boucle ne soit jamais exécuté).
Initialisation avant la with
portée peut être plus sûr dans le sens que, après la déclaration with
on peut supposer sans risque que la variable existe. Si d'autre part la variable doit être affectée dans l'instruction with
, ne pas l'initialiser avant que l'instruction with
entraîne réellement une vérification supplémentaire: Python va erreur si l'attribution a été ignorée dans l'instruction with
.
Une instruction with est uniquement utilisée à des fins de gestion de contexte. Il force (par syntaxe) que le contexte que vous ouvrez dans le with
soit fermé à la fin de l'indentation.
Je ne vois pas 'logs_count' dans le code fourni. Voulez-vous dire 'my_count'? – DeepSpace
ce code est correct, pas besoin d'initialiser 'my_count' en dehors de la boucle en python –