zoukankan      html  css  js  c++  java
  • Python课程回顾(day10)

    函数补充

     1.函数的使用原则

    函数的使用应该分为两个明确的阶段,一个是定义阶段,一个是引用阶段。在定义的阶段内,系统只会检测语法,不会执行函数体内的代码,只有在调用的时候才会触发函数体代码实现功能,在使用函数必须要遵循先定义,后引用的原则

    def bar():                
        print('from bar')
    def foo():
        print('from foo')
        bar()
    foo()                  只调用了foo,而foo里才开始调用bar,所以先执行foo代码再执行bar函数体下的代码
    
    def foo():
        print('from foo')
        bar()
    foo()                  在此处调用foo执行foo函数体下的代码块时,bar还未被定义。所以会报错,一定要定义后引用,不能先引用后定义。
    def bar():
        print('from bar')
    

    2.函数分类

    整体来说函数可以分为两大类,内置函数与自定义函数

    内置函数就是py中自带的已经定义好的功能,例如:del,input(),return,while,for

    而自定义函数则需要用户根据自己需求写入功能之后所命名的函数,例如登陆接口,购物车等等。

    3.函数的定义与调用方式

    函数定义的三种形式:

    有参函数:即在函数名后的括号内有相应的参数的成为有参函数。

    无参函数:即在函数名后的括号内没有相应参数的称为无参函数。

    空函数:只定义了一个函数名而函数体下没有代码块的称为空函数,通常用于设计代码结构。

    函数调用的三种形式:

    语句形式 :直接输入函数名加括号调用(login())

    表达式形式:直接将函数名后的参数在末尾输入

    将函数中的处理结果当做另外一个函数的参数

    4.返回值(return)

    我们什么时候需要返回值?或者说我们什么时候不需要返回值?

    在函数体执行完毕之后假如我们需要拿到一个结果,而这个结果也是在以后你需要用到的,这个时候我们就需要用到返回值。通常来说有参函数都是需要用到返回值的。

    而如果我们只是单纯的完整运行这个函数体而不需要拿到任何结果,我们就不需要用到返回值。通常来说无参函数都是不需要用到返回值的。

    需要注意的是:函数的返回值是没有类型和个数限制的,如果返回一个值,那么就是返回值的本身,若返回的是多个值,则会以逗号分割开以元组类型返回到用户。

    而函数不仅只有返回的功能还拥有结束函数执行的功能,若函数体下代码块运行到return则直接结束函数体。

    def func():
        return 123
    res=func()
    print(res,type(res))
    
    123 <class 'int'>


    def func():
    print('from func')
    return 1,1.1,'hello',[1,2,3]
    res=func()
    print(res,type(res))

        from func
       (1, 1.1, 'hello', [1, 2, 3]) <class 'tuple'>

    def func():
    return
    pass 若返回0个值或根本没有返回值则返回None
    res=func()
    print(res)

    None

    5.函数参数的使用

     跟函数的分类一样,函数的参数也可以分为两大类:

    形式参数:在定义阶段,函数名括号内定义的参数或者说是变量名就称之为形参

    实际参数:在调用阶段,函数名括号内传入的值或者说是变量值就称之为实参

    在调用整个函数体的阶段内,函数体会将实参的值与形参的参数建立绑定关系,这个绑定关系只在函数体运行时生效,函数体执行完毕后则自动解除绑定,被python回收。

    强调一点!!:要记住实参就是给形参赋值用的

    def func(x,y):
        print(x,y)
    func(1,2)      这里会将括号内的实参绑定给上面的形参xy
    

    细分的话形参与实参又都有各自不同的两种分类

    形参:默认参数与位置参数

    位置形参:在定义阶段,按照从左到右依次定义的参数就称为位置形参。那么位置形参要接收的值也必须按照顺序来 一 一 对应。而位置形参定义了多少个,值就必须要有多少个,不能多且也不能少。

    默认参数:在定义阶段,直接将默认参数赋值的参数就叫做默认参数,通常用于不需要更改或变化较小的参数,默认参数必须要定义在位置参数后面。

    实参:关键字实参与位置实参

    位置实参:与上面的位置形参形成对应关系,实参要按照吮吸依次赋值给形参,同样数量要对应形参,不能多不能少。

    关键字实参:可以不需要考虑按照顺序依次赋值,只需要根据形参的名称来赋值即可,按照key=value赋值。例:x,y,z     x=1 y=2 z=3,关键字实参则需要在位置参数的后面。否则会报错。

    def func(x,y,z):
        print(x,y,z)
    func(1,2)          报错:需要三个值
    func(1,2,3)
    func(1,2,3,4)      报错:需要三个值

    func(z=3,1,y=2) 报错:1只对应y

    可变长参数:可变长参数是指实参的个数不固定的参数,因为实参有位置实参和关键字实参,如果要传入的参数过多的话,那么使用位置形参就需要根据要接收的值有相等的参数。所以形参根据实参的这种特性就有了相对应的方法。就是*args与**kwargs

    如果要接收多个值的们可以使用*args

    def foo(x, y, *args):
        print(x,y,args)
    foo(1, 2, 3, 4, 5)     溢出的值会以元组类型传入形参

    1,2,(3,4,5)

    同样的传值的时候也可以使用*号键将其他类型的值赋值给*args

      def foo(x,y,*args):
                print(x,y)
                print(args)
            foo(1,2,*[3,4,5])    在列表前加*号键将列表打散形成一个个的值,因为上面的值溢出了所以溢出的值会以元组类型添加到*args

    def foo(x,y,z):
      print(x,y,z)
    foo(*[1,2,3])                此处会将列表打散形成一个个值,若上面形参里的值没有溢出就可以按照位置实参依次赋值。
     

    针对要接收关键字实参的时候我们可以使用**kwargs

    **kwargs会将实参里的关键字实参以字典形式赋值给形参

    def foo(x, y, **kwargs):
        print(x, y)
        print(kwargs)
    
    foo(1, y=2, a=1, b=2, c=3)
    
    1 2
    {‘a’:1,‘b’:2,‘c’:3}

    def foo(x,y,**kwargs):
         print(x,y)
         print(kwargs)
    foo(1,y=2,**{'a':1,'b':2,'c':3})   同样的在字典前加**也可以将字典打散成关键字实参。

    提示:实参里的位置实参与关键字实参是可以混合使用的,但一定要遵循使用规则,否则会报错

    1.位置实参必须要放在关键字实参的前面。

    2.无论位置实参还是关键字实参都不能对同一个形参重复赋值。

  • 相关阅读:
    Node.js~在linux上的部署~pm2管理工具的使用
    在SSIS包中使用 Checkpoint从失败处重新启动包
    自己的第一个android应用(天气)
    ADF 项目创建流程
    HDU2159:FATE(二维完全背包)
    hdu 1542 Atlantis
    POJ 1037 DP
    移动互联与大数据之美-逐浪CMS2 X1.1发布
    SGU 201 Non Absorbing DFA (DP)
    基于SMTP协议的CMD命令邮件发送
  • 原文地址:https://www.cnblogs.com/lefy11-/p/9700479.html
Copyright © 2011-2022 走看看