Numéro public : You Er Hut
Auteur : Peter
Editeur : Peter
Bonjour à tous, je m'appelle Pierre ~
J'ai écrit la fonctionnalité d'une fonction Python récemment et j'ai fait quelques erreurs. Cet article trie principalement le mécanisme de passage de paramètres des fonctions Python.Le contenu principal comprend :
1. La fonction la plus simple (pas de valeur de retour, paramètre)
def hello_python():
print("hello python!")
复制代码
hello_python() # 直接调用
复制代码
hello python!
复制代码
Deuxièmement, la fonction la plus simple (avec valeur de retour, pas de paramètres)
def hello_python():
data = "hello python!"
return data # data就是返回值
复制代码
hello_python()
复制代码
'hello python!'
复制代码
3. Avec un paramètre (pas de valeur par défaut)
def hello(data):
result = "hello " + data
return result
复制代码
hello("python")
复制代码
'hello python'
复制代码
Passez une autre valeur :
hello("java")
复制代码
'hello java'
复制代码
Il est également possible de modifier les informations du paramètre en interne :
def hello_name(name):
result = "Hello " + name.title() + "!"
return result
复制代码
hello_name("tom")
复制代码
'Hello Tom!'
复制代码
hello_name("jack")
复制代码
'Hello Jack!'
复制代码
Quatrièmement, avec plusieurs paramètres (pas de valeur par défaut)
def information(name, age):
data = "我叫" + name.title() + ", 今年" + str(age) + "岁"
return data
复制代码
information("tom", 23)
复制代码
'我叫Tom, 今年23岁'
复制代码
information("JACK", 18)
复制代码
'我叫Jack, 今年18岁'
复制代码
5. Valeur par défaut du réglage des paramètres (un paramètre)
def hello_name(name="Peter"):
result = "Hello " + name
return result
复制代码
Si aucune valeur spécifique n'est donnée pour le paramètre, la valeur par défaut est utilisée
hello_name()
复制代码
'Hello Peter'
复制代码
Donnez au paramètre une valeur réelle, telle que Tom est la valeur réelle dans l'exemple suivant ; il s'agit souvent d'un paramètre réel
hello_name(name="Tom")
复制代码
'Hello Tom'
复制代码
6. Valeur par défaut du réglage des paramètres (plusieurs paramètres)
def information(name="Peter", age=20):
data = "我是" + name + ", 今年" + str(age) + "岁"
return data
复制代码
1. Toutes les valeurs par défaut sont utilisées :
information()
复制代码
'我是Peter, 今年20岁'
复制代码
2. Toutes les valeurs réelles entrantes :
information(name="Tom", age=27)
复制代码
'我是Tom, 今年27岁'
复制代码
3. Seules les valeurs réelles de certains paramètres sont transmises ; les valeurs par défaut sont utilisées pour ceux qui ne sont pas transmis :
information(name="Tom")
复制代码
'我是Tom, 今年20岁'
复制代码
information(age=18)
复制代码
'我是Peter, 今年18岁'
复制代码
7. Certains paramètres utilisent des valeurs par défaut
Les paramètres avec des valeurs par défaut doivent être placés en dernier ; les paramètres avec des valeurs par défaut doivent être placés en dernier
def information(name, age=20):
data = "我是" + name + ", 今年" + str(age) + "岁"
return data
复制代码
information("Peter") # age默认使用20
复制代码
'我是Peter, 今年20岁'
复制代码
information(name="Peter")
复制代码
'我是Peter, 今年20岁'
复制代码
information("Peter", age=18)
复制代码
'我是Peter, 今年18岁'
复制代码
La méthode suivante signale directement une erreur :
information(age=18, "Peter")
复制代码
File "<ipython-input-26-2d03cd04a05a>", line 1
information(age=18, "Peter")
^
SyntaxError: positional argument follows keyword argument
复制代码
information(age=18, name="Peter") # age默认使用20
复制代码
'我是Peter, 今年18岁'
复制代码
Important : Dans une fonction, vous devez d'abord lister les paramètres sans valeurs par défaut, puis lister les paramètres avec des valeurs par défaut :
def information(age=20, name):
data = "我是" + name + ", 今年" + str(age) + "岁"
return data
复制代码
File "<ipython-input-28-d36363c3194c>", line 1
def information(age=20, name):
^
SyntaxError: non-default argument follows default argument
复制代码
Comment comprendre que les paramètres avec des valeurs par défaut doivent être placés à la fin ?
Ce qui suit est une fonction personnalisée de get_name, transmettant le prénom, le nom et le deuxième prénom, mais tout le monde n'a pas un deuxième prénom :
def get_name(first_name, last_name, middle_name=''):
if middle_name: # 如果存在中间名字
name = first_name + middle_name + last_name
else:
name = first_name + last_name
return name
复制代码
get_name(first_name="张", last_name="飞", middle_name='')
复制代码
'张飞'
复制代码
get_name(first_name="孙", last_name="空", middle_name='悟')
复制代码
'孙悟空'
复制代码
Le résultat de ne pas transmettre middle_name n'est certainement pas ce que nous voulons :
get_name(first_name="孙", last_name="空")
复制代码
'孙空'
复制代码
Huit, paramètres de localisation
def get_information(name, age):
data = "我是" + name + ", 今年" + str(age) + "岁"
return data
复制代码
get_information("Tom", 20)
复制代码
'我是Tom, 今年20岁'
复制代码
get_information("20","Tom") # 一定要按照原来形参的顺序传递
复制代码
'我是20, 今年Tom岁'
复制代码
Le résultat ci-dessus n'est certainement pas ce que nous voulons
Neuf, arguments de mots clés
Lors du passage d'arguments par mot clé, l'ordre n'est pas pertinent :
get_information(name="Tom", age=20)
复制代码
'我是Tom, 今年20岁'
复制代码
get_information(age=20, name="Tom")
复制代码
'我是Tom, 今年20岁'
复制代码
10. Utilisation mixte d'arguments de position et d'arguments de mots-clés
get_information("Tom", age=20)
复制代码
'我是Tom, 今年20岁'
复制代码
Lors de son utilisation, vous devez toujours suivre l'ordre dans la fonction d'origine, sinon une erreur sera signalée :
get_information(age=20,"Tom")
复制代码
File "<ipython-input-39-bc20bc544493>", line 1
get_information(age=20,"Tom")
^
SyntaxError: positional argument follows keyword argument
复制代码
Onze, avancé : *args use
Parfois, notre implémentation ne sait pas combien de paramètres la fonction doit accepter. À ce stade, nous pouvons collecter n'importe quel nombre de paramètres en utilisant *args
ou .**kwargs
L'utilisation introduite en premier *args
. Supposons que nous voulions convertir la taille de chaque élève d'une classe en mètres, c'est-à-dire diviser par 100 :
def height(*args):
data = args
return data
复制代码
height()
复制代码
Par défaut, la fonction collecte un tuple vide :
()
复制代码
height(178)
复制代码
Lors de la transmission de données, celle-ci est représentée sous la forme d'un tuple :
(178,)
复制代码
height(178,189)
复制代码
(178, 189)
复制代码
def height(*args):
for data in args: # 对args中的元素进行循环操作
print("身高是: {}m".format(data / 100))
复制代码
height(189,180,167,172) # 调用
复制代码
身高是: 1.89m
身高是: 1.8m
身高是: 1.67m
身高是: 1.72m
复制代码
12. Avancé : utilisez **kwargs
**kwargs
允许将不定长度的键值对,作为参数传递给一个函数
def information(**kwargs):
data = kwargs
print(data)
复制代码
默认情况下收集的是字典:
information(name="Peter")
复制代码
{'name': 'Peter'}
复制代码
information(name="Peter", age=23)
复制代码
{'name': 'Peter', 'age': 23}
复制代码
def information(**kwargs):
for k, v in kwargs.items():
print("{0} == {1}".format(k,v))
复制代码
information(name="Peter")
复制代码
name == Peter
复制代码
information(name="Peter", age=23)
复制代码
name == Peter
age == 23
复制代码
information(name="Peter", age=23, height=175)
复制代码
name == Peter
age == 23
height == 175
复制代码
十三、进阶:*args
和形参连用
def fun(x, *args):
print("x:", x)
print("args:", args)
复制代码
fun(1)
复制代码
x: 1
args: ()
复制代码
fun(1,2)
复制代码
x: 1
args: (2,)
复制代码
fun(1,2,3,4)
复制代码
x: 1
args: (2, 3, 4)
复制代码
fun(1,2,3,4,"Peter")
复制代码
x: 1
args: (2, 3, 4, 'Peter')
复制代码
十四、进阶:**kwargs 和形参连用
def fun(x, **kwargs):
print("x:", x)
print("kwargs:", kwargs)
复制代码
fun(1)
复制代码
x: 1
kwargs: {}
复制代码
fun(1,name="Peter")
复制代码
x: 1
kwargs: {'name': 'Peter'}
复制代码
fun(1,name="Peter",age=23)
复制代码
x: 1
kwargs: {'name': 'Peter', 'age': 23}
复制代码
十五、进阶:形参+*args
+**kwargs
连用
def fun(x, *args, **kwargs):
print("x:", x)
print("args:", args)
print("kwargs:", kwargs)
复制代码
fun(1)
复制代码
x: 1
args: ()
kwargs: {}
复制代码
fun(1,2,3)
复制代码
x: 1
args: (2, 3)
kwargs: {}
复制代码
fun(1,name="Peter",age=23)
复制代码
x: 1
args: ()
kwargs: {'name': 'Peter', 'age': 23}
复制代码
fun(1,2,3,name="Peter",age=23)
复制代码
x: 1
args: (2, 3)
kwargs: {'name': 'Peter', 'age': 23}
复制代码
kwargs = {"name":"Peter","age":23}
fun(1,2,3,**kwargs)
复制代码
x: 1
args: (2, 3)
kwargs: {'name': 'Peter', 'age': 23}
复制代码
推荐资料
最后给大家推荐一个来自B站的波波老师讲解的关于Python函数的内容,感兴趣可以去观看,讲解的很详细: