• Python之函数总结


    一,函数的定义与调用

    定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。

       def 是固定的,不能变,必须是连续的def三个字母,不能分开

    def 函数名(参数):
            """注释:函数功能和参数说明"""
            函数体
            ……
            return 返回值

    调用:函数名+()

    函数的返回值:return+返回值 ,结束函数

           return不带返回值相当于None

    无返回值,返回一个值,返回多个值

    二,函数的参数

     三,函数对象

      函数是第一类对象,即函数可以当做数据传递

      1,可以被引用

      2,可以当做参数被传递

    def func():
          print('func')
    def func2(f):
          print(f)
          f()
          print('func2')

      3,返回值可以是函数

    def func():
        print('func')
    
    def func2(f):
        print('func2')
        return f
    
    fu = func2(func)

      4,可以当做容器类型的元素

    四,函数的嵌套

    为了保护内部函数,确定内部函数只能在外部函数中被调用

    def animal():
        def tiger():
            print('bark')
        print('eat')
        tiger()
    # animal()

    函数名的本质:就是一个变量,保存了函数所在的内存地址

    五,作用域

    作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域

      全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

      局部作用域:局部名称空间,只能在局部范围内生效

    闭包:内部函数包含了对外部作用域而非全局作用域名字的引用,该内部函数称为闭包函数

    六,装饰器

      1,装饰器的本质 :闭包函数

     2,功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能
     3,装饰器的固定格式
    def timer(func):
        def inner(*args,**kwargs):
            '''执行函数之前要做的'''
            re = func(*args,**kwargs)
            '''执行函数之后要做的'''
            return re
        return inner

    4,带参数的装饰器

    def outer(flag):
        def timer(func):
            def inner(*args,**kwargs):
                if flag:
                    print('''执行函数之前要做的''')
                re = func(*args,**kwargs)
                if flag:
                    print('''执行函数之后要做的''')
                return re
            return inner
        return timer
    
    @outer(False)
    def func():
        print(111)
    
    func()
    View Code

    5,多个装饰器装饰同一个函数

    def qqxing(func):  #func = pipixia_inner
        def qqxing_inner(*args,**kwargs):
            print('in qqxing:before')
            ret = func(*args,**kwargs)  #pipixia_inner
            print('in qqxing:after')
            return ret
        return qqxing_inner
    
    def pipixia(func):  #dapangxie
        def pipixia_inner(*args,**kwargs):
            print('in pipixia:before')
            ret = func(*args,**kwargs)      #dapangxie
            print('in pipixia:after')
            return ret
        return pipixia_inner
    
    #qqxing(pipixia_inner)  -->dapangxie = qqxing_inner()
    @qqxing    #dapangxie = qqxing(dapangxie)  -->dapangxie = qqxing(pipixia(dapangxie)) -->
    @pipixia   #dapangxie = pipixia(dapangxie)
    def dapangxie():
        print("饿了么")
    dapangxie()
    View Code
     
    有一种能力,是持续不断的努力
  • 相关阅读:
    【手绘漫画】图解LeetCode之x 的平方根(LeetCode 69题)
    tcp 发送长度9 实际组包49
    tcp 发送报文长度和响应报文长度
    http 响应报文
    中台翻车纪实:一年叫停,员工转岗被裁,资源全浪费
    再也不怕女朋友问我二分查找了!【手绘漫画】图解二分查找(修订版)(LeetCode 704题)
    我的Hexo-Github博客搭建笔记
    J
    怎样使用npm打包公布nodejs程序包
    JQuery Jcrop—JQuery Jcrop 图像裁剪工具学习
  • 原文地址:https://www.cnblogs.com/shaojiafeng/p/7256235.html
Copyright © 2020-2023  润新知