Introduction détaillée aux paramètres dans les fonctions Python

不言
Libérer: 2018-10-09 16:33:17
avant
2948 Les gens l'ont consulté

Cet article vous apporte une introduction détaillée aux paramètres des fonctions python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Définir des fonctions

Les fonctions en python sont définies à l'aide du mot-clé def Le format est :

def 函数名(形参):
    函数语句块
Copier après la connexion

Le nom de la fonction ne peut contenir que des chaînes. . Les traits de soulignement et les chiffres ne peuvent pas commencer par un chiffre.
Les paramètres formels de la fonction sont divisés en : paramètres positionnels, paramètres par défaut (paramètres avec valeurs par défaut) et paramètres dynamiques
return est un mot-clé utilisé pour renvoyer le résultat de la fonction. est rencontré, la fonction se termine immédiatement. Ensuite, exécutez d'autres instructions

Paramètres de position

def func(a,b):
return a,b 
print(func(1,2)) #按照位置传入参数,1赋值给a,2赋值给b
print(func(a=2,b=3))#按照关键字传入参数,指定a、b的值
print(func(3,b=6))#混合传入,此时注意,位置参数要在前面
#如果不指定实参会报错,因为函数中由位置参数,则调用函数时必须传入参数
#print(func())
Copier après la connexion

Le résultat de sortie est :

    (1, 2)
    (2, 3)
    (3, 6)
Copier après la connexion

Do ne pas écrire return ou simplement écrire return, et rien d'autre. Lors de l'écriture d'un autre contenu, la fonction retournera None
return peut renvoyer une valeur de n'importe quel type de données. Lorsque return renvoie plusieurs valeurs, elles seront organisées en tuples. C'est-à-dire que lorsque plusieurs valeurs sont renvoyées, le type est tuple. Vous pouvez utiliser plusieurs variables pour recevoir des résultats, mais le nombre de variables doit être le même que le nombre de valeurs renvoyées. L'exemple est le suivant :

def func():
    return 1,'asd',(1,'a',['hello','world']),[1,2,3]
print('直接打印结果:',func())
a,b,c,d = func() 
print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)
Copier après la connexion

Sortie :

直接打印结果: (1, 'asd', (1, 'a', ['hello', 'world']), [1, 2, 3])
a: 1
b: asd
c: (1, 'a', ['hello', 'world'])
d: [1, 2, 3]
Copier après la connexion

Paramètres par défaut

def func(name,age=20):
    print('{}已经{}岁啦'.format(name,age))
func('刘小姐')#默认参数可以不传,这时age值为默认的20
func('刘小姐',28)#默认参数传值时则覆盖默认值
Copier après la connexion
刘小姐已经20岁啦
刘小姐已经28岁啦
Copier après la connexion
La valeur par défaut n'est attribuée qu'une seule fois. Cela fait une différence lorsque la valeur par défaut est un objet mutable, tel qu'une liste, un dictionnaire ou une instance de la plupart des classes. Par exemple, la fonction suivante cumulera les paramètres qui lui sont passés (précédemment) lors des appels suivants :

def func(a = []):
    a.append('x')
    return a
for i in range(6):
    print(func())
Copier après la connexion
À chaque appel de la boucle, bien qu'aucun paramètre ne soit passé à a, a ne sera pas La liste vide [] est attribué, car la valeur par défaut ne sera attribuée qu'une seule fois, le résultat devient donc le suivant :

    ['x']
    ['x', 'x']
    ['x', 'x', 'x']
    ['x', 'x', 'x', 'x']
    ['x', 'x', 'x', 'x', 'x']
    ['x', 'x', 'x', 'x', 'x', 'x']
Copier après la connexion
Si vous ne souhaitez pas que la valeur par défaut s'accumule lors des appels suivants, vous pouvez définir le fonctionnent comme suit :

def func(a = None):
    if a is None: #如果a是None
        a = []
    a.append('x')
    return a
for i in range(6):
    print(func())
Copier après la connexion
['x']
['x']
['x']
['x']
['x']
['x']
Copier après la connexion

Paramètres dynamiques

Les paramètres dynamiques sont divisés en deux types :

L'un est représenté par *args, il sera recevoir uniformément les paramètres de position redondants et les enregistrer sous forme de tuple
L'autre est représenté par **kwargs, qui recevra uniformément les paramètres de mots-clés redondants et les enregistrer sous forme de dictionnaire
Voyons d'abord sur un exemple de *args

def func(a,b,c,*args):
    print('*args内容为:',args)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    return sum1
print(func(1,2,3,4,5,6,7,8,9,10))
Copier après la connexion
Bien qu'il n'y ait que 4 paramètres formels, nous en avons passé 10, et 4 à 10 sont tous reçus par *args pour former un tuple

    *args内容为: (4, 5, 6, 7, 8, 9, 10)
    55
Copier après la connexion
Jetons un coup d'œil à **kwargs

def func(a,b,*args,c=20,**kwargs):
    print('*args内容为:',args)
    print(c)
    print('**kwargs内容为:',kwargs)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    for k in kwargs:
        sum1 += kwargs[k]
    return sum1
print(func(1,2,3,4,5,6,7,8,9,10,c=22,x=11,y=33,z=66))
Copier après la connexion
*args内容为: (3, 4, 5, 6, 7, 8, 9, 10)
22
**kwargs内容为: {'x': 11, 'y': 33, 'z': 66}
187
Copier après la connexion
Copier après la connexion
À partir de l'exemple ci-dessus, nous pouvons voir que si différents types de paramètres formels apparaissent, leur ordre devrait être : paramètres de position, paramètres dynamiques

args, paramètres par défaut, paramètres dynamiques *keargs

car on suppose que les paramètres par défaut sont avant

args, c'est-à-dire func(a,b,c=20, args,* kwargs), puis lorsque le paramètre est passé, la valeur du paramètre formel c sera d'abord affectée au paramètre réel 3 (car la position de 3 correspond exactement à c, la valeur est la valeur par défaut lorsque le paramètre par défaut ne reçoit aucune valeur et la valeur par défaut est écrasée lorsqu'elle est attribuée). À ce moment, c = 3, mais c = 20 apparaît plus tard et une erreur sera signalée car le paramètre formel c a été attribué. deux fois, ce qui n'est pas autorisé, donc les paramètres par défaut sont classés après les args

Les paramètres par défaut doivent être disposés devant les

kwargs, car s'ils sont disposés à l'arrière, c=22 sera directement reçu par kwargs, donc les paramètres par défaut n'ont aucun sens et une erreur Ce qui suit est une autre façon d'organiser les paramètres par défaut devant *args. Bien que cette méthode produise également le même résultat, vous devez être particulièrement prudent sur la position de la valeur de c lors de l'appel

Et cette méthode rendra les paramètres par défaut dénués de sens, car la valeur par défaut de 20 ne le sera jamais. utilisé.

Il convient donc de mettre les paramètres par défaut après *args.

def func(a,b,c=20,*args,**kwargs):
    print('*args内容为:',args)
    print(c)
    print('**kwargs内容为:',kwargs)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    for k in kwargs:
        sum1 += kwargs[k]
    return sum1
print(func(1,2,22,3,4,5,6,7,8,9,10,x=11,y=33,z=66))
Copier après la connexion
*args内容为: (3, 4, 5, 6, 7, 8, 9, 10)
22
**kwargs内容为: {'x': 11, 'y': 33, 'z': 66}
187
Copier après la connexion
Copier après la connexion
Un moyen rapide de transmettre des paramètres dynamiques

Pour *args, vous pouvez directement ajouter * devant lis lors du passage des paramètres entrants. content

def func(*args):
    return args
lis = [1,2,{3,4,5},6,7,[8,9,0,1,23],34,5,(56,67),78,23]
print(type(lis))
print(func(*lis))
Copier après la connexion
Pour les **kwargs, vous pouvez ajouter ** devant dic lors du passage des paramètres et passer directement le contenu
<class &#39;list&#39;>
(1, 2, {3, 4, 5}, 6, 7, [8, 9, 0, 1, 23], 34, 5, (56, 67), 78, 23)
Copier après la connexion

def func(**kwargs):
    return kwargs
dic = {'name':'超人','age':'500','job':'装逼'}
print(func(**dic))
Copier après la connexion
{'name': '超人', 'age': '500', 'job': '装逼'}
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!