12
votes

Python est-il une langue faiblement tapée comme variables peut changer de type?

La façon dont je comprends, ce qui suit est autorisé dans PHP car c'est une langue faiblement dactylographiée.

>>> var = "Hello"
>>> type(var)
<type 'str'>
>>> var = 5
>>> type(var)
<type 'int'>


3 commentaires

Python est une langue dynamique de sorte qu'il est faiblement tapé dans un sens et fortement typé dans d'autres (il n'y a pas de définition unique), mais toute la question est beaucoup plus compliquée que cela. Voir wiki.python.org/moin/strongvsweaktyping


duplicaté possible de peut-on me dire quels moyens de typage et de typage faibles et qui sont meilleurs? , ainsi que est-ma-compréhension-de-types-systèmes-correct


Je pense que ce n'est pas une dupe car cela est très spécifique à Python. Ce n'est pas comme si nous ne pouvons plus demander des questions spécifiques à la langue sur le système de type, car une typing forte et faible a été expliquée dans les réponses à d'autres questions. D'une part, même si cela l'a expliqué, il serait difficile de trouver entre toutes les autres informations.


4 Réponses :


43
votes

Votre exemple démontre dynamique em> dactylographie, pas faible dactylographie. Le typage dynamique signifie généralement que le type de données qu'un objet peut stocker est mutable; Toute cible peut contenir une liaison à n'importe quel type d'objet. Contraste qu'avec, disons, c #, qui est statiquement dactylographié [*].

$x = 1 + "1"; // x is 2


5 commentaires

Je pense que vous voulez dire 2 pour ce dernier, pas '11'.


Oh je vois. Je l'avais mélangé. Si je veux une langue statistiquement typée pour le Web, je devrais probablement aller avec C # ou Java.


Eh bien, je avez écrit une application CGI en C ++ avant, mais je ne le recommande pas.


Confus: Si vous aimez la syntaxe Pythons, vérifiez la langue BOO pour la plate-forme CLR. Pour le JVM Scala vous donne beaucoup plus de vérification de type et moins de code verbose.


@Confused: Non. Vous ne voulez pas une langue statistique typée. Java et C # sont de grandes douleurs au cou pour travailler avec. Vous devez poser votre vraie question (comme une question distincte). Pourquoi pensez-vous que la typage statique est-elle? Que faites-vous cela fait de la typographie statique "sembler" si importante?



2
votes

Oui. Ce n'est pas une typographie forte / faible, c'est-à-dire la typographie statique / dynamique. La saisie faible permet des choses telles que 5 + '5' à égal 10.


1 commentaires

Intéressant - alors Java serait faiblement de type, du moins dans la relation de nombres et de chaînes primitives.



5
votes

Il n'y a pas de définition réelle de la typographie faible ou de la frappe forte. Tout sur les conversions de type implicites et n'a rien à voir avec la typage statique / dynamique.

une langue typée statiquement comme Java peut être faiblement dactylographiée (pas si c'est-à-dire) et une langue dactylographiée de manière dynamique comme PHP peut être fortement typée (pas que c'est ).

Un langage faiblement dactylographié est plus libéral dans quels types de données peuvent être mélangés dans certaines opérations.


2 commentaires

faux! Le plus gros problème PHP qu'elle a faible type Lang, car vous pouvez avoir des bugs cachés dans le code comme des variables non définies, des fonctions, etc.- Maintenir l'application Web de PHP très dure, car cette raison


@Yosef Votre commentaire semble être complètement indépendant de cette réponse (que vous avez mal à tort, c'est faux).



5
votes

Un ajout la première réponse: C'est un TAD plus compliqué car dans Python, l'opérateur + est surchargé de sens, il serait à la fois d'ajouter (mathématiques) et de concaténer (coller deux cordes). Dans l'exemple PHP

$i = 1 . "1" // $i == "11"


0 commentaires