Python函数总结

为了给别人讲一下函数,就简单总结了一下,没什么用,懒得举例子了。(还有闭包和装饰器没有写到,有时间在写吧!)
一、函数的定义:
    函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

def 函数名(参数,默认参数,长度可变参数):
    """注释(fun.__doc__)""" #可以不要,也可以在之后通过fun.__doc__ = ''赋值
    函数体
    
二、函数的调用
    fun()
    python和其他语言一样,不允许在声明之前对其引用或者调用。
    换句话说,只要在函数(变量)调用之前定义即可
    
三、函数的引用
    fun
    在python中,一切皆对象,函数也可以作为参数或者函数的返回值使用。
四、函数的参数
    
    1.函数参数的分类:
    (1)普通参数(位置参数)
        列表,函数,字典都可以直接用一个参数表示
    (2)默认值参数
        fun(a=1,b=2):pass

    (3)可变长度参数
        非关键字可边长参数(元组)
        def fun(*arg):pass
        调用:
        fun(0,1,2,3,)
        
        关键字变量参数(字典)
        def fun(**arg):pass
        调用:
        fun(x = 50,name = ‘tom’)
        
    (4)关键字参数
        关键字参数不是定义函数的时候的形参,而是指函数调用时,可以通过关键字参数,使实参传递给形参时摆脱位置的对照。
        def fun(a,b,c):pass
        通过关键字参数调用:
        fun(b=1,c=5,a=6)
        
        
    2.其他
    (1)可以使用“函数名.__defaults__”查看所有默认参数的当前值,返回值为一个元组
    (2)函数参数传递的时候,是‘=’操作,不是深浅拷贝,这就造成了在函数里改变原来的列表某一项的值,原来的列表中的值也会改变。
    (3)传递参数时,可以通过在实参序列前加一个星号将其解包,然后传递给多个单变量形参。序列解包相当于位置参数,优先处理。(调用得时候的顺序为fun(*arg,位置参数,关键字参数,**arg))。

五、函数的返回值
        函数的返回值有三种类型,
        (1)没有 return 语句
        调用函数返回值为None。
        (2)有return语句,只有一个返回值
        函数返回语句为:return a 调用后返回的类型为,如果a是列表,返回的就是列表,如果a是其它类型,返回的就是其他类型
        (3)有return语句,有多个返回值
        函数返回语句为:return a,b,c
        调用后返回的类型为以a,b,c,为元素的元组:(a,b,c)
        
六、函数的作用域:
    python中的作用域分4种情况:
        L:local,局部作用域,即函数中定义的变量;
        E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
        G:globa,全局变量,就是模块级别定义的变量;
        B:built-in,系统固定模块里面的变量,比如int, bytearray等。
        搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。
        
    作用域小结
    (1)只有模块、类、及函数才能引入新作用域;
    (3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;
    (4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字。nonlocal是python3新增的关键字。

七、递归函数:
    (1)定义:
        在一个函数的内部调用自身,就是递归函数
    (2)特点:
        1.必须有一个明确的结束条件
        2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
        3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。)
        4.所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
       

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值