Pour fournir une réponse qui évite peut-être un peu le commentaire de bruit ici, je vais essayer un autre.
Les deux pragmata à votre question de départ vraiment l'élargir à d':
use strict "vars";
use strict "refs";
use strict "subs";
use warnings;
Pour répondre à chaque tour à tour:
- L'effet de l'
use strict "vars"
est de provoquer une erreur de compilation de faire référence à une variable sans déclarer d'abord qu'il existe (comme c'est le défaut dans plus statique des langages tels que C, C++ et Java). Parce que Python n'ont pas de syntaxe pour déclarer qu'une variable existe, il n'a pas d'équivalent. L'attribution d'un nom en Python toujours la crée si elle n'existe pas en premier. Cette fonction de l' strict
n'a pas d'équivalent Python et la sécurité qu'il offre ne peut pas être recréé.
Par exemple:
$ perl -c -e 'use strict "vars"; $foo = 1'
Global symbol "$foo" requires explicit package name at -e line 1.
-e had compilation errors.
$ perl -c -e 'no strict "vars"; $foo = 1'
-e syntax OK
- L'effet de l'
use strict "refs"
est d'interdire l'utilisation de la plaine de chaînes de caractères contenant le nom d'un (existant ou nouveau) de la variable comme une référence à la variable elle-même. Python ne permet pas de faire cela, donc n'a pas besoin de le désactiver.
Par exemple:
$ perl -e 'use strict "refs"; ${"message"} = "hello"; print $message'
Can't use string ("message") as a SCALAR ref while "strict refs" in use at -e line 1.
$ perl -e 'no strict "refs"; ${"message"} = "hello"; print $message'
hello
- L'effet de l'
use strict "subs"
est de provoquer une compilation toute tentative pour appeler une fonction qui est connu pour ne pas exister. Python n'a pas d'effectuer une telle vérification, et n'a aucun moyen d'activer cette fonctionnalité.
Par exemple:
$ perl -c -e 'use strict "subs"; foo'
Bareword "foo" not allowed while "strict subs" in use at -e line 1.
-e had compilation errors.
$ perl -c -e 'no strict "subs"; foo'
-e syntax OK
- L'effet de l'
use warnings
est de permettre à plus de mises en garde à la fois de la compilation et de l'exécution des différentes catégories de comportement par défaut dans les versions antérieures, peuvent parfois être désiré, ou qui n'a jamais été une bonne idée, mais n'est pas strictement une erreur. Par exemple, l'utilisation de non initialisée valeurs des nombres doit généralement donner un avertissement, mais à l'origine il ne le fait pas.
Par exemple:
$ perl -e 'use warnings; my $u; print 2 + $u'
Use of uninitialized value $u in addition (+) at -e line 1.
2
$ perl -e 'no warnings; my $u; print 2 + $u'
2
Enfin, certaines observations ont été faites pour que Python a les mêmes fonctionnalités en __future__
. Toutefois, cela ne devrait pas être considéré comme similaire à Perl pragmata, comme la plupart de ces derniers sont lexicalement d'étendue, et peut être activée ou désactivée dans de petites étendues comme l'exige; où est Python __future__
n'est activé que pour un fichier source en entier.
Par exemple.
use strict;
use warnings;
my $total;
$total += count_things($_) for @list;
{
no warnings 'uninitialised';
printf "The total is %d\n", $total;
}
Un peu-contrieved exemple, mais celui-ci illustre l'utilisation de l' no warnings 'uninitialised'
pour désactiver l'avertissement sur l'utilisation d'une valeur non initialisée simplement à l'intérieur de l' printf
déclaration, tout en gardant les autres mises en garde activé partout ailleurs.
En résumé: Python n'ont pas d' use strict
ou tout près de l'équivalent de l'une des caractéristiques de sécurité sont obligatoires ou non disponibles dans le langage Python, et ne pas avoir un use warnings
. Ces fonctionnalités qu'il fournit sont activés uniquement au niveau des fichiers et ne peut pas être sélectivement activée ou désactivée par portée.
Edit: en Fait j'ai été informé que Python n'ont certaines contrôlable de drapeau d'avertissement, qui peut être activé et désactivé en tant que de besoin.