paramètres de f...LOGIN

paramètres de fonction

1. Paramètres de valeur par défaut

Parfois, dans nos fonctions personnalisées, si aucun paramètre n'est défini lors de l'appel, une valeur par défaut doit être donnée. À ce stade, les paramètres de valeur par défaut doivent être utilisés.

# -*- coding: UTF-8 -*-
def print_user_info( name , age , sex = '男' ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex))
    return;
# 调用 print_user_info 函数
print_user_info( '两点水' , 18 , '女')
print_user_info( '三点水' , 25 )

Résultat de sortie :

昵称:两点水 年龄:18 性别:女
昵称:三点水 年龄:25 性别:男

Vous pouvez voir que lorsque vous définissez le paramètre par défaut, lors de l'appel de la fonction, si vous ne transmettez pas le paramètre, la valeur par défaut sera utilisée. Mais une chose à noter ici est que seuls les paramètres à la fin de la liste des paramètres formels peuvent avoir des valeurs de paramètre par défaut, c'est-à-dire que lors de la déclaration des paramètres de fonction, vous ne pouvez pas d'abord déclarer les paramètres formels avec des valeurs par défaut, puis déclarer les paramètres. sans valeurs par défaut. En effet, les valeurs attribuées aux paramètres formels sont attribuées de manière positionnelle. Par exemple, def func(a, b=1) est valide, mais def func(a=1, b) n'est pas valide.

Est-ce la fin des paramètres de valeur par défaut ? Pas encore, réfléchissez bien, si le paramètre est un conteneur modifiable comme un lsit (liste) ou un dict (dictionnaire), alors que devrions-nous utiliser comme valeur par défaut ? Nous pouvons utiliser Aucun comme valeur par défaut. Tout comme l'exemple suivant :

# 如果 b 是一个 list ,可以使用 None 作为默认值
def print_info( a , b = None ):
    if b is None :
        b=[]
    return;

Regardez attentivement l'exemple. Avez-vous de telles questions ? Ne pouvons-nous pas simplement utiliser b=[] directement dans les paramètres ? Autrement dit, cela s'écrirait comme ceci :

def print_info( a , b = [] ):
    return;

, non ? Aucune erreur n'a été trouvée après l'exécution. Puis-je l'écrire comme ceci ? Une chose qui nécessite une attention particulière ici : la valeur du paramètre par défaut est un objet immuable, tel que None, True, False, number ou string. Si vous opérez comme ci-dessus, vous rencontrerez des problèmes lorsque la valeur par défaut est modifiée ailleurs. toutes sortes de problèmes. Ces modifications affecteront la valeur par défaut lors du prochain appel de cette fonction.

L'exemple est le suivant :

# -*- coding: UTF-8 -*-
def print_info( a , b = [] ):
    print(b)
    return b ;
result = print_info(1)
result.append('error')
print_info(2)

Le résultat de sortie :

[]
['error']

Observez attentivement, vous constaterez que la valeur sortie la deuxième fois n'est pas du tout celle que vous voulez, alors ne faites pas cela.

Encore une chose, parfois je ne veux tout simplement pas la valeur par défaut, je veux juste juger si le paramètre par défaut a une valeur transmise. Que dois-je faire ? Nous pouvons faire ceci :

_no_value =object()
def print_info( a , b = _no_value ):
    if b is _no_value :
        print('b 没有赋值')
    return;

objet ici est la classe de base pour toutes les classes en python. Vous pouvez créer des instances de la classe d'objet, mais ces instances ne sont d'aucune utilité réelle car elle n'a pas de méthodes utiles, ni de données d'instance (car elle n'a pas de dictionnaire d'instances, vous ne pouvez même pas définir les valeurs de propriété). La seule chose que vous pouvez faire est de tester votre identité. Cette fonctionnalité peut également être utilisée pour déterminer s'il existe une entrée de valeur.

2. Paramètres de mots-clés

En Python, vous pouvez transmettre des paramètres à une fonction via des noms de paramètres sans vous soucier de l'ordre dans lequel la liste de paramètres est définie. C'est ce qu'on appelle un paramètre de mot-clé. Il y a deux avantages à utiliser les paramètres clés :

Premièrement, puisque nous n'avons pas à nous soucier de l'ordre des paramètres, l'utilisation des fonctions devient plus simple.

2. En supposant que d'autres paramètres ont des valeurs par défaut, nous ne pouvons attribuer des valeurs qu'aux paramètres que nous voulons

# -*- coding: UTF-8 -*-
def print_user_info( name ,  age  , sex = '男' ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex))
    return;
# 调用 print_user_info 函数
print_user_info( name = '两点水' ,age = 18 , sex = '女')
print_user_info( name = '两点水' ,sex = '女', age = 18 )

Valeur de sortie :

昵称:两点水 年龄:18 性别:女
昵称:两点水 年龄:18 性别:女

3.

Parfois, lorsque nous concevons une interface de fonction, nous pouvons avoir besoin de paramètres de longueur variable. En d’autres termes, nous ne pouvons pas déterminer à l’avance le nombre de paramètres transmis. Python fournit une méthode tuple pour accepter des paramètres qui ne sont pas directement définis. Cette méthode ajoute un astérisque * devant le paramètre. Si aucun paramètre n'est spécifié lors de l'appel de la fonction, il s'agit d'un tuple vide. Nous ne pouvons pas non plus transmettre de variables sans nom à la fonction.

Par exemple :

# -*- coding: UTF-8 -*-
def print_user_info( name ,  age  , sex = '男' , * hobby):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex) ,end = ' ' )
    print('爱好:{}'.format(hobby))
    return;
# 调用 print_user_info 函数
print_user_info( '两点水' ,18 , '女', '打篮球','打羽毛球','跑步')

Le résultat de sortie :

昵称:两点水 年龄:18 性别:女 爱好:('打篮球', '打羽毛球', '跑步')

Vous pouvez savoir grâce au résultat de sortie que *hobby est un paramètre variable et que hobby est en fait un tuple (ancêtre d'origine)

Les paramètres de longueur variable prennent également en charge les paramètres clés et ne sont pas Les paramètres clés définis seront placés dans un dictionnaire. Cette méthode consiste à ajouter ** devant le paramètre, et à modifier l'exemple ci-dessus comme suit :

# -*- coding: UTF-8 -*-
def print_user_info( name ,  age  , sex = '男' , ** hobby ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex) ,end = ' ' )
    print('爱好:{}'.format(hobby))
    return;
# 调用 print_user_info 函数
print_user_info( name = '两点水' , age = 18 , sex = '女', hobby = ('打篮球','打羽毛球','跑步'))

Le résultat de sortie :

昵称:两点水 年龄:18 性别:女 爱好:{'hobby': ('打篮球', '打羽毛球', '跑步')}

En comparant l'exemple ci-dessus et cet exemple, nous pouvons savoir que *hobby est un paramètre variable , et hobby est en fait C'est un tuple (ancêtre original), **hobby est un paramètre de mot-clé et hobby est un dict (dictionnaire)

4 N'acceptez que les paramètres de mot-clé

Les paramètres de mot-clé sont faciles à utiliser et sont. pas sujet aux erreurs de paramètres, donc certains Parfois, la fonction que nous définissons espère que certains paramètres doivent être transmis à l'aide de paramètres de mots-clés. Que devons-nous faire à ce moment-là ?

Cet effet peut être obtenu en plaçant les paramètres de mot-clé obligatoires après un *paramètre ou un seul*, tel que :

# -*- coding: UTF-8 -*-
def print_user_info( name , *, age  , sex = '男' ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex))
    return;
# 调用 print_user_info 函数
print_user_info( name = '两点水' ,age = 18 , sex = '女' )
# 这种写法会报错,因为 age ,sex 这两个参数强制使用关键字参数
#print_user_info( '两点水' , 18 , '女' )
print_user_info('两点水',age='22',sex='男')

Comme vous pouvez le voir sur l'exemple, si les paramètres de mot-clé âge et sexe ne sont pas applicables, une erreur sera être signalé.

Dans de nombreux cas, l'utilisation de paramètres de mots-clés obligatoires rendra la signification plus claire que l'utilisation de paramètres de position, et le programme sera plus lisible. L'utilisation de paramètres de mots-clés obligatoires est également préférable à l'utilisation des paramètres **kw et les paramètres de mots-clés obligatoires sont également utiles dans certaines situations plus avancées.

section suivante
chapitredidacticiel