Dévoilement de l'erreur de syntaxe dans l'ordre des arguments de fonction
Pourquoi le code Python suivant rencontre-t-il une SyntaxError ?
def fun1(a="who is you", b="True", x, y): print a,b,x,y
La raison de l'erreur est que les arguments autres que ceux par défaut (x et y) doivent précéder les arguments par défaut (a et b) dans la signature de la fonction. Les paramètres obligatoires doivent apparaître avant les paramètres facultatifs avec des valeurs par défaut.
Le danger des modes mixtes
Autoriser des arguments autres que ceux par défaut à suivre les arguments par défaut introduirait une ambiguïté pour l'interprète dans déterminer quelles valeurs correspondent à quels arguments. Considérons le scénario suivant :
def fun1(a, b, x="who is you", y="True"): ...
Supposons que nous appelions cette fonction avec les arguments suivants :
fun1(1, "ok") # 1 assigned to x, "ok" assigned to a or b?
Sans la règle de classement, il serait impossible d'attribuer des valeurs aux arguments sans ambiguïté.
Syntaxe correcte pour les arguments de fonction
Pour définir correctement les fonctions, les arguments par défaut doivent toujours suivre les arguments non par défaut. La syntaxe correcte pour l'exemple de fonction est :
def fun1(x, y, a="who is you", b="True"): ...
Cette syntaxe garantit que l'interpréteur peut attribuer des valeurs aux arguments de manière déterministe, même en présence d'arguments de mots clés et d'arguments manquants.
Sauvetage des arguments par mot-clé
Les arguments par mot-clé vous permettent de remplacer les valeurs par défaut en spécifiant explicitement le nom de l'argument. Ceci est particulièrement utile pour ignorer les arguments manquants. Par exemple, considérons l'appel suivant à fun1 :
fun1(x=1, b="False") # Override default value of b
Conclusion
La restriction sur les arguments autres que ceux par défaut après les arguments par défaut garantit une interprétation claire et sans ambiguïté des appels de fonction. , empêchant les erreurs de syntaxe et les erreurs d'exécution dues à une affectation d'argument incorrecte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!