• python之路之函数02


    一  函数的参数:

    我们把函数的参数分为形式参数和实际参数,简称形参和实参。

    形参:在定义函数时,函数名括号内定义的参数。

    实参:在调用函数时,函数名括号内需要用户传入的值。

    注意:

    实参值(相当于变量的值)与形参(变量名)的绑定关系只在函数调用时才会生效,在函数调用结束后接触绑定关系。

    二  那么我们所学的函数参数有:位置形参与默认形参,位置实参与关键字实参。

    位置形参:

    def foo(x,y,z)
        print(x,y,z,)
    
    
    那么在foo后面的就叫做位置形参,调用函数时必须为其传值,多一个不行,少一个也不行。
    同样的位置形参必须放到默认形参的前面。
    对于经常需要变化的值,需要将对应的形参定义成位置形参。

    位置实参:

    def foo(x,y,z)
        print(x,y,z,)

    foo(1,2,3)
    那么(1,2,3)就是我们说说的实参,它与位置形参是一一对应的关系。

    关键字参数:

    关键字参数也是实参的一种。它是以key-value的形式作为实参,也就是说他相当于直接跟形参的变量进行一对一进行传值的,可以不用像位置实参那样按照位置形参的位置顺序。

    # def func(x,y,z):
    #    print(x,y,z)
    #
    # # func(1,z=1,y=2,)#    位置实参必须放到关键字实参前面
    # func(y=2,x=1,z=4)#       关键字实参可以不按顺序
    #func(1,x=1,y=2,z=1)# b不能为一个位置形参重复传值 # def register(name,age,sex
    ='fenale'): # print(name,age,sex)

    默认参数:

    默认参数同样作为形参,它主要用在大多数都一样的值,需要将形参默认成为一个值,在我们需要改变的那一小部分再对其进行传值。

    def register(name,age,sex=female)
    print(name,age,sex)
    # register('egon',18,)#当用户没有传值时默认为。 # register('egon', 18,'male')#当用户传入值时,则按照用户所传值
    同样的位置形参必须放到默认形参的前面

    默认的参数的值只在定义阶段赋值一次,也就是说默认参数的值在定义阶段就固定死了,不会因为再在函数子代码中再次赋值而改变。

     def register(name,age,sex='female'):
    #     print(name,age,sex)
    #
    # sex='male'
    # register('egon',13,)#输出结果为female,也就是说默认形参在定义阶段就被固定了,在运行阶段不能再改变。

    默认参数的值应该设为不可变类型:

    # def register(name, age, l=[]):#将默认参数设成可变类型列表
    #     l.append(age)
    #     print(name, age, l)
    #
    # register('egon',14,)
    # register('alxe',13,)
    # register('eg',123,)结果就是每输出一次那么上一次的结果会加到下一次中来。结果为:eg [14,13,123]

    # def register(name, age, l=None):

    # print(name, age, l)
     # register('egon',13,) 
    # register(
    'alxe',13,)

    三  可变参数:

    1  *args会将溢出的位置实参的值全部接收,然后保存成元组传给args

    def func(x,y,z,*args)
        print(x,y,z,)
        print(ars)
    
    func(1,2,3,34,5,66,4,5)
    
    那么输出的结果就是:
    1 2 33456645

     

    那么一旦实参中碰到*,就要把该实参的值打散。

     def foo(x,y,z,a,*args):#这种情况下溢出的实参以元祖的形式赋值给args
    #     print(x,y,z,a)
    #     print(args)
    #
    # foo(1,2,3,4,5,*[1,2,3,4,])
    # foo(1,2,3,4,5,*(1,2,3,4,))
    # foo(1,2,3,4,5,*'hello')#将’hello‘打散。
    输出结果为:

    1 2 3 4
    (5, 1, 2, 3, 4)
    1 2 3 4
    (5, 1, 2, 3, 4)
    1 2 3 4
    (5, 'h', 'e', 'l', 'l', 'o')
    2 1 1 2

    2  **kwargs会将溢出的关键字实参全部接收,然后保存成字典传给kwargs:

    def foo(x,y,z,a,**kwargs):#将溢出的关键字实参以key_value的形式存在
    #     print(x,y,z,a)
    #     print(kwargs)
    # #
    # foo(x=2,y=1,z=3,a=1,b=2,)
    
    输出的结果为:
    {‘b’:2}

    **kwargs那么在关键字实参中将字典打散成key=value的形式。

    def foo(x,y,z,a,**kwargs):#将溢出的关键字实参以key_value字典的形式存在
        print(x,y,z,a)
        # print(kwargs)
    #
    foo(x=2,y=1,**{'z':1,'a':2})#双星号在实参中将字典中打散,打散成key=value的形式。
  • 相关阅读:
    c++中的内存管理【转载】
    c++中dynamic_cast、static_cast、reinterpret_cast和const_cast作用
    c++中的顶层const和底层const
    c++赋值操作符需要确保自我赋值的安全性问题
    二分法查找
    Servlet基础总结
    java 正则表达式:有丶东西
    HTTP协议初步认识
    Java synchronized到底锁住的是什么?
    ECMA Script 6新特性之解构赋值
  • 原文地址:https://www.cnblogs.com/zhangsanfeng/p/8657475.html
Copyright © 2020-2023  润新知