zoukankan      html  css  js  c++  java
  • 函数参数传递

    函数的参数传递

    在讲函数参数传递前先补充两个名词

    1、形参: 即形式参数,它是在定义函数名和函数体时使用的参数,目的是接收调用该函数传递参数。
    2、实参: 即实际参数,它是在调用时传递给函数的参数,传递给被调用函数的值。实参可以是常量、变量、表达式、函数等,但无论是哪种类型,在进行函数调用时必须具有确定的值,这些值会传递给形参。

    下面用一段代码具体说明形参和实参

    def sum(a,b):
        retutn a+b
        
    sum(10,20)
    
    

    在sum函数中a和b就是形参。第四行10和20就是实参


    函数传递方式如下

    1、位置参数传递

    当调用函数时传入的参数位置是和定义函数的参数位置相对应,当使用位置参数传递时,调用韩式传入的参数数量要和定义函数参数的数量相同,否则程序会出错。这也是函数默认的传递方式
    观察如下代码
    fun_01:

    def fun_01(a,b,c):
        return a,b,c
    
    print(fun_01(1,2,3))
    

    运行结果:

    (1,2,3)
    

    fun_02:

    def fun_02(a,b,c):
        return c,b,a
    
    print(fun_01(1,2,3))
    

    运行结果:

    (3,2,1)
    

    上面两个函数在定义时参数名是一样的,并且在调用时传入的参数也是一样的,但返回的结果却不同。这是由于当函数调用时,传入的参数位置和定义的函数参数位置相对应,当调用函数传入参数那一刻,函数的参数值就已经确定了,至于输出结果的顺序是由于return返回值的顺序决定的。


    2、关键字参数传递

    假设某个函数的参数非常复杂,为了不让程序出错,我们可以把参数的名称和值绑定在一起,使用参数名提供的参数叫作关键字参数
    观察如下代码
    fun_01:

    def connect(url,port):
        return 'url is %s,and port is %s'%(url,port)
    
    print(connect(url='www.baidu.com',port='80'))
    

    运行结果:

    url is www.baidu.com,and port is 80
    

    注:

    1. 使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为python解释器能够用参数名匹配参数值
    2. 关键字参数可以和位置参数混合使用,但位置参数必须要出现在关键字参数之前

    3、参数默认值

    在定义函数时,可以给参数赋予默认值,如果该参数最终没有被传递值,将使用该默认值
    观察如下代码

    def sum(a,b,c=20):
        retutn a+b+c
        
    sum(10,20)
    
    

    运行结果:

    50
    

    注: 参数c使用了默认值


    4、可变参数

    在python中函数可以定义可变参数,即传入函数的参数是可变的
    语法格式如下:

    def functionname([formal_args,]*args,**kwargs):
        function_sutite
        return [expression]
    

    说明: 在上述格式中,以星号(*)开始的变量args会存放所有的未命名的变量参数,args为元组;以**开始的变量kwargs会存放命名参数,即形如key=value的参数,kwargs为字典。
    观察如下代码

    def test(*args,**kwargs):
       print(args)
       print(kwargs)
    test(1,2,3,a=4,b=5)
    

    运行结果:

    (1,2,3)
    {'a':4,'b':5}
    

    注: 如果*和**参数混合使用,那么传入的顺序必须和声明的顺序一致,如果调用函数时没有指定参数,那么它就是一个空的元组或者空的字典
    对*和**总结:

    • 使用*可以将未命名的参数打包成元组类型

    • 使用**可以将命名的参数打包成字典类型


    5、解包裹

    所谓解包裹就是在调用函数时使用*和**。但是解包裹课可变参数传递并不是相反的操作,他们是两个独立的过程

    观察如下代码

    *解元组类型

    def test(a,b,c):
       print(a,b,c)
    
    args=(1,2,3)
    test(*args)
    

    运行结果:

    1 2 3
    

    **解字典类型

    def test(a,b,c):
       print(a,b,c)
    
    kwargs=('a':1,'b':2,'c':3)
    test(**kwargs)
    

    运行结果:

    1 2 3
    

    6、混合传递方式

    前面介绍的五种参数传递方式在定义和调用函数时可以混合使用,但在混合使用需要符合以下规则:

    1. 先位置参数传递
    2. 再关键字参数传递
    3. 再可变参数传递

    注: 此方式在此不做代码演示

    如有问题可联系QQ:2499578824
  • 相关阅读:
    新冲刺Sprint3(第六天)
    新冲刺Sprint3(第五天)
    新冲刺Sprint3(第四天)
    应对Gradle联网问题、长时间卡在resolve dependencies的思路
    《点厨》项目——个人总结
    Sprint总结
    快速暴力解决Eclipse ADT和Android Studio兼容问题,创建同时兼容ADT和AS的安卓工程
    如何花样展示自己的摄影作品?强大的WebGL能力展示
    团队项目——《广商百货》演示(博客版)
    软件工程学期总结
  • 原文地址:https://www.cnblogs.com/chunbo/p/11187862.html
Copyright © 2011-2022 走看看