06-python基础知识-函数使用

函数使用

变量作用域

  • 块级作用域

    if True:
        name = 'xiaoming'
    
    # 没有块级作用域
    print(name)
    
  • 局部作用域

    def test():
        a = 10
    
    test()
    # 局部变量:在函数内部定义的变量,只能在函数内部使用
    # print(a)
    
  • 全局作用域

    # 全局变量:定义在函数外部的变量,拥有全局的作用
    num = 10
    
    def show():
        # 函数内部可以使用外部定义的变量
        # print(num)
        # 若想更改外部变量,需要进行global声明
        global num
        # 不能更改外部的全局变量,而是定义了一个局部变量
        num = 20
        
    show()
    print(num)    
    
  • nonlocal使用

    def wai():
        n = 100
        def nei():
            # 使用外部函数的局部变量,需要进行声明才可更改
            nonlocal n
            # 内部函数可以使用外部函数的局部变量,但是不能更改
            n = 200
            print(n)
        nei()
        print(n)
    wai() 
    

匿名函数

  • 函数可以像普通变量一样进行赋值

    def test():
        print('for test')
        
    print(test.__name__)    
    
    # 函数可以像普通变量一样进行赋值
    a = test
    print(a.__name__)
    a()
    
  • 函数可以作为一个函数的参数

    def show(func):
        func()
    
    # 函数作为参数传递
    show(test)
    
  • 匿名函数

    • 说明:当将函数作为参数传递时,若函数只需要一次,没有必要单独定义函数,可以使用匿名函数解决。
    • 格式:lambda 参数列表: 表达式
      • 参数列表与定义函数是一样,可以是多个,多个参数之间使用逗号分隔
      • 表达式就是返回值,不需要使用return关键字
    • 示例:
    lt = [
        {'name': 'dahua', 'age': 18, 'height': 165},
        {'name': 'erhua', 'age': 16, 'height': 160},
        {'name': 'dagou', 'age': 20, 'height': 175},
        {'name': 'ergou', 'age': 15, 'height': 155}
    ]
    
    def key(d):
        return d['height']
    
    # lt.sort(key=key)
    lt.sort(key=lambda d: d['age'])
    
    for i in lt:
    	print(i)  
    

闭包使用

  • 定义:具有执行环境的函数

    • 外部函数中定义一个内部函数
    • 内部函数中使用外部函数的局部变量
    • 外部函数将内部函数作为返回值返回
    • 此时的内部函数就叫闭包
  • 示例:

    def wai(n):
        # 定义内部函数
        def nei():
        	# 内部函数中使用外部函数的局部变量
            return n * n
        # 内部函数作为返回值
        return nei
    
    f1 = wai(10)
    f2 = wai(4)
    print(f1())
    print(f2())
    
    

装饰器

  • 作用:当需要改变一个函数原有的功能时,但是不想/不能改变原来的函数,可以通过装饰器解决

  • 使用:

    • 装饰器其实就是一个函数,该函数有一个参数(函数类型),返回一个闭包
    • 在返回的闭包中调用传递进来的函数,然后在调用函数的前后就可以添加内容
  • 示例:

    def zhuangshiqi(func):
      	def wrapper():
            print('开始装饰')
            func()
            print('装饰结束')
    
        return wrapper
    
    @zhuangshiqi
    # 相当于执行了:test = zhuangshiqi(test)
    def test():
    	print('for test')    
        
    # t2 = zhuangshiqi(test)
    # t2()
    # test = zhuangshiqi(test)
    
    test()
    
    @zhuangshiqi
    def demo():
    	print('原有内容')
    
    demo()
    
  • 分类:

    • 装饰无参无返回值的函数
    def shuai(func):
          def wrapper():
              print('拉风的暴龙眼镜')
              func()
              print('鳄鱼牌大头皮鞋')
          return wrapper
    
      @shuai
      def diaosi():
      	print('杰哥,屌丝一枚')
          
      diaosi()
    
    • 装饰带参无返回值的函数
    def zhuangshiqi(func):
        def wrapper(*args, **kwargs):
            print('开始装饰')
            func(*args, **kwargs)
            print('装饰结束')
    	return wrapper
    
    @zhuangshiqi
    def test(n):
          print('I like num {}'.format(n)) 
            
    test(250)
    
    • 装饰带参有返回值的函数
    def zhuangshiqi(func):
        def wrapper(*args, **kwargs):
            print('开始装饰')
            ret = func(*args, **kwargs)
            print(ret)
            print('装饰结束')
            return ret
        return wrapper
    
    @zhuangshiqi
    def add(a, b):
    	return a + b
    
    print(add(3, 5))         
    

递归函数(了解)

  • 定义:在函数内部调用自己的函数就叫递归函数。
  • 组成:
    • 函数内部调用自己
    • 终止条件(停止调用自己的条件)
    • 核心算法
  • 特点:
    • 代码简介
    • 可读性差
    • 瞬间占用内存比较大,终止条件出错立即崩溃
    • 能不使用就不使用,就是在不得不用的时候再使用(遍历目录)

猜你喜欢

转载自blog.csdn.net/weixin_44147782/article/details/85267221