Maison >développement back-end >Tutoriel Python >Introduction détaillée aux paramètres dans les fonctions Python
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) 55Jetons 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 avantargs, 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 leskwargs, 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} 187Un 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 'list'> (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!