Y a-t-il un endroit où vous devez définir un type dans un langage de programmation de type dynamique?

enter image description here

Je sais que nous pouvons utiliser 'else number = default'. mais ce n'est qu'un exemple pour montrer des idées.

1
Zero Days 23 juil. 2015 à 07:54

3 réponses

Meilleure réponse

Les langages dynamiques et statiques nécessitent tous deux une "définition". Les langages dynamiques n'ont souvent pas besoin d'une "déclaration". Une définition est lorsque vous créez réellement la variable. Une déclaration est une façon formelle de dire que "à partir de maintenant, cette variable existe" - comme int n; en C.

En Python, la définition se produit lors de l'affectation. L'utilisation se produit lorsque vous essayez d'obtenir la valeur de la variable (également appelée déréférencement). Vous ne pouvez pas utiliser une variable sans la définir et c'est pourquoi vous voyez cette erreur.

Certaines langues comme perl possèdent ce qu'elles appellent autovivification. Cela signifie que si vous utilisez une variable sans la définir, elle sera automatiquement définie pour vous. Dans ce cas, ce programme se comportera différemment. La valeur de number sera 0.

2
Noufal Ibrahim 23 juil. 2015 à 05:06

La saisie d'une langue n'a rien à voir avec l'erreur que vous obtenez.

La frappe dynamique signifie que les noms / variables ne sont pas liés à un type spécifique au moment de la compilation. Nous pouvons faire pointer le même nom vers différents types d'objets dans le même programme (sur différentes lignes de cours). Mais cela ne signifie pas que vous pouvez accéder à un nom / variable avant sa définition.

L'erreur que vous obtenez est parce que le nom / variable n'est pas défini du tout. De plus, plutôt que de définir number dans else, il semble plus facile de définir number à une valeur par défaut avant le bloc if..elif.

1
Anand S Kumar 23 juil. 2015 à 05:08

Votre entrée est 3, donc number n'est pas encore défini, car il est manqué par votre échelle if-else.

Si vous ne voulez pas de condition "catch-all" else, affectez simplement un number = 'default' avant votre échelle if-else.

1
Roshan Mathews 23 juil. 2015 à 04:57