Maison >développement back-end >Tutoriel Python >Introduction détaillée aux paramètres dans les fonctions Python

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

不言
不言avant
2018-10-09 16:33:173039parcourir

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 函数名(形参):
    函数语句块

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())

Le résultat de sortie est :

    (1, 2)
    (2, 3)
    (3, 6)

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)

Sortie :

直接打印结果: (1, 'asd', (1, 'a', ['hello', 'world']), [1, 2, 3])
a: 1
b: asd
c: (1, 'a', ['hello', 'world'])
d: [1, 2, 3]

Paramètres par défaut

def func(name,age=20):
    print('{}已经{}岁啦'.format(name,age))
func('刘小姐')#默认参数可以不传,这时age值为默认的20
func('刘小姐',28)#默认参数传值时则覆盖默认值
刘小姐已经20岁啦
刘小姐已经28岁啦
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())
À 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']
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())
['x']
['x']
['x']
['x']
['x']
['x']

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))
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
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))
*args内容为: (3, 4, 5, 6, 7, 8, 9, 10)
22
**kwargs内容为: {'x': 11, 'y': 33, 'z': 66}
187
À 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))
*args内容为: (3, 4, 5, 6, 7, 8, 9, 10)
22
**kwargs内容为: {'x': 11, 'y': 33, 'z': 66}
187
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))
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)

def func(**kwargs):
    return kwargs
dic = {'name':'超人','age':'500','job':'装逼'}
print(func(**dic))
{'name': '超人', 'age': '500', 'job': '装逼'}

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer