Maison  >  Article  >  développement back-end  >  Que signifie fonction ?

Que signifie fonction ?

藏色散人
藏色散人original
2019-05-15 10:13:3022949parcourir

Que signifie fonction ?

Fonction, un nom général représentant un sous-programme. Dans certains langages de programmation, il fait référence à un sous-programme ou à une instruction qui renvoie une valeur. Joue le rôle de mot-clé dans certains langages de programmation.

En Python, la fonction est très importante et courante, obtenant généralement des informations sur les paramètres d'une classe ou d'une fonction.

En Python, les fonctions entrent généralement dans les catégories suivantes :

1 POSITIONAL_OR_KEYWORD

S'il n'y a pas de déclaration *. , alors il est de type POSITIONAL_OR_KEYWORD Tout comme la sémantique, les paramètres de type POSITIONAL_OR_KEYWORD peuvent être appelés en passant des paramètres en position POSITIONAL, ou en passant des paramètres dans le mot-clé KEYWORD. L'exemple suivant est le plus simple :

def foo(a):
pass
# 位置传参调用
foo(1)
# 关键字传参调用
foo(a=1)

Deuxièmement, VAR_POSITIONAL

Le second est un paramètre de position variable, déclaré via un préfixe * Si vous regardez un *xxx. déclaration de paramètre de fonction (pas un appel de fonction ! La déclaration et l'appel ont deux significations différentes), il doit être de type VAR_POSITIONAL Tout comme la sémantique, les paramètres de ce type ne peuvent être appelés que via les paramètres de position POSITIONAL. passant. À l'intérieur de la fonction, les paramètres du type VAR_POSITIONAL sont affichés sous forme de tuple. Une chose à noter est que le type VAR_POSITIONAL peut être appelé sans transmettre aucun paramètre sans signaler d'erreur, et un seul est autorisé à exister. Voici un exemple simple :

def foo(*b):
print(b)
# 不传参数不会报错,参数值是一个空元祖
foo() # 结果是 ()
# 可以传入任意个位置参数调用
foo(1, 2.0, '3', True) #结果是 (1, 2.0, '3', True)

3. KEYWORD_ONLY

Le troisième type est celui des paramètres de mot-clé. Ce paramètre sera uniquement après le paramètre de type VAR_POSITIONAL et ne sera pas With. ** préfixe. Tout comme la sémantique, ce type de paramètres ne peut être transmis qu'à l'aide du mot-clé KEYWORD, pas des paramètres de position, car tous les paramètres de position ont été reçus par les paramètres de type VAR_POSITIONAL précédents, donc KEYWORD_ONLY ne peut recevoir les valeurs des paramètres que via le mot-clé . Voici un exemple simple :

# VAR_POSITIONAL不需要使用时,可以匿名化
def foo(*, c):
pass
# 只能关键字传参调用
foo(c=1)

Quatre. VAR_KEYWORD

Le quatrième type est constitué de paramètres de mots-clés variables. Les paramètres de type VAR_KEYWORD sont déclarés avec le préfixe ** (. Pas un appel de fonction ! La déclaration et l'appel ont deux significations différentes). Comme la sémantique, ce type de paramètre ne peut être appelé que via le mot-clé KEYWORD, mais peut recevoir n'importe quel nombre de paramètres-clés, même 0 paramètre, et est affiché sous forme de dictionnaire (dict) à l'intérieur de la fonction. Un seul paramètre de type VAR_KEYWORD est autorisé, et il ne peut être déclaré qu'à la fin de la fonction. Voici un exemple simple :

def foo(**d):
print(d)
# 不传参数不会报错,参数值是一个空字典
foo() # 结果是 {}
# 可以传入任意个关键字参数调用
foo(a=1, b=2.0, c='3', d=True) # 结果是 {'d': True, 'c': '3', 'b': 2.0, 'a': 1}

5. POSITIONAL_ONLY

Le cinquième type est le paramètre positionnel que j'ai choisi de parler de ce dernier car il n'est pas important à. all et appartient à python. Un produit historique de Avec l'aide d'Ipython, vous pouvez toujours voir la signature Init : dict(self, /, *args, **kwargs) où self est le paramètre de position POSITIONAL_ONLY. Croyez-moi, vous n'aurez pas besoin de l'utiliser. Python recommande désormais d'utiliser VAR_POSITIONAL à la place. Voici un exemple complet :

import inspect
def foo(a, *b, c, **d):
pass
for name, parame in inspect.signature(foo).parameters.items():
print(name, ': ', parame.kind)

Paramètres par défaut

Les types VAR ne permettent pas de définir les paramètres par défaut

POSITIONAL_OR_KEYWORD et KEYWORD_ONLY peuvent personnaliser les paramètres par défaut, tandis que VAR_POSITIONAL et VAR_KEYWORD ne permettent pas la personnalisation des paramètres par défaut, car le paramètre par défaut de VAR_POSITIONAL est un tuple vide tuple() et le paramètre par défaut de VAR_KEYWORD est un dictionnaire vide dict(). Si vous personnalisez les paramètres par défaut, vous n'avez pas besoin de transmettre de paramètres lors de l'appel de la fonction. Si la valeur par défaut est vide, vous devez transmettre des paramètres avant d'appeler.

Emplacement des paramètres par défaut

Les paramètres par défaut de type POSITIONAL_OR_KEYWORD doivent être placés à l'arrière, sinon une erreur sera signalée Bien que KEYWORD_ONLY ne soit pas obligatoire, car il. est transmis à l'aide de mots-clés. Peu importe qui vient en premier, mais il est préférable de le remettre le plus en arrière possible.

Les paramètres par défaut ne sont pas ceux par défaut ?

Les paramètres par défaut ne doivent pas être définis sur des types de variables (tels que list, dict, set). Si vous modifiez les paramètres par défaut dans la fonction, ce ne sera plus la valeur par défaut la prochaine fois. appelle-le.

Exemple correct :

def foo(p1, p2=2.0, *, k1, k2=None):
a_list = k2 or list()
pass
foo(1, k1='3')

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn