zoukankan      html  css  js  c++  java
  • 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的形式。
  • 相关阅读:
    MKMapVIew学习系列2 在地图上绘制出你运行的轨迹
    WPF SDK研究 Intro(6) WordGame1
    WPF SDK研究 Intro(3) QuickStart3
    WPF SDK研究 Layout(1) Grid
    WPF SDK研究 目录 前言
    WPF SDK研究 Intro(7) WordGame2
    WPF SDK研究 Layout(2) GridComplex
    对vs2005创建的WPF模板分析
    WPF SDK研究 Intro(4) QuickStart4
    《Programming WPF》翻译 第6章 资源
  • 原文地址:https://www.cnblogs.com/zhangsanfeng/p/8657475.html
Copyright © 2011-2022 走看看