• 【Python】学习笔记十三:函数的参数对应


    位置传递

    我们在定义函数时候已经对函数进行了参数传递调用,但是那只是粗浅的位置传递

    示例

    def sum(a,b,c):
        d = a+b+c
        return d
    print(sum(1,2,3))

    调用函数sum的时候,1,2,3分别传递给a,b,c

    关键字传递

    关键字传递是根据每个参数的名字传递参数

    print(sum(c=3,b=2,a=1))

    关键字可以跟位置传递混合使用,但是位置参数要出现在关键字参数之前

    print(sum(1,c=3,b=2))

    参数默认值

    在定义参数时,使用形如a=10的方式,可以给参数赋予默认值(default),如果参数最终没有被传递值,将使用该默认值。

    def sum(b,c,a=10):
        d = a+b+c
        return d
    print(sum(c=3,b=2))

    默认值需要写在最后,否则报错!

    image

    调用时候没有a的值,则使用了默认值

    打印屏幕结果为:

    image

    包裹传递

    在定义函数时候,我们并不知道调用函数的时候需要传递多少个参数。这时候,使用包裹传递会非常有用

    下面是包裹位置传递的例子

    def func(*num):
        print(type(num))
        print(num)
    
    func(1,2,3)
    func(1,2,3,44,56)

    两次调用,尽管参数个数不同,但是都是基于函数func定义。在func的参数表中,所有的参数被name收集,根据位置合成了一个元组(tuple),这就是包裹传递

    在元组前加*

    下面是包裹关键字传递的例子

    def func(**dict):
        print(type(dict))
        print(dict)
    
    func(a=1,b=2,c=3)
    func(a=1,b=2,c=3,d=44,e=56)

    dict是一个字典,收集所有的关键字,传递函数给func。为了提醒Python,参数dict是包裹关键字传递所用的字典,

    在dict前加**

    解包裹

    *与**也可以在调用的时候使用

    下面为例子:

    def func(a,b,c):
        print(a,b,c)
    args = (1,6,3)
    func(*args)

    所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。

    相应的,也存在对词典的解包裹,使用相同的func定义,然后:

    def func(a,b):
        print(a,b)
    
    dict={'a':1,'b':2}
    func(**dict)

    注意:请注意定义时和调用时的区分。包裹和解包裹并不是相反操作,是两个相对独立的过程。

  • 相关阅读:
    P1001 A+B Problem
    NOIP2015D1T2 信息传递
    海淀区赛游记。。。。
    P3375 【模板】KMP字符串匹配
    Print Article HDU
    BZOJ-2-4870: [Shoi2017]组合数问题 矩阵优化 DP
    BZOJ-1- 4868: [Shoi2017]期末考试-三分
    #6164. 「美团 CodeM 初赛 Round A」数列互质-莫队
    湖南大学第十四届ACM程序设计新生杯(重现赛)
    Codeforces Round #530 (Div. 2)
  • 原文地址:https://www.cnblogs.com/OliverQin/p/7682942.html
Copyright © 2020-2023  润新知