python——函数总结

函数总结:

1,什么是函数?

  • 减少代码的重复性
  • 增强代码的可读性

2,函数的结构

def 函数名():
	pass

3,函数的执行(调用)

  • 函数名()

4,函数的返回值

  • 没有return 返回的是None

  • 有return 返回单个值 与单个值的数据类型相同

  • return 多个值 1,‘alex',[1,2,3] 以元组的形式返回 (1,‘alex',[1,2,3] )

  • 函数的参数:

    • 形参

      • 位置参数,从左至右,一一对应

      • 默认参数,传值覆盖,不传则默认

      • 万能参数,*args , **kwargs ,尽量使用这个,易扩展

      • 仅限关键字参数,*args和**kwargs中间

      • #仅限关键字参数
        def func(a,b,*args,c):
            print(a,b)
            print(c)
        func(1,2,3,4,5,c=666)
        #1 2
        # 666
        
        
      • 形参角度顺序:位置参数,*args,默认参数,仅限关键字参数,**kwargs

    • 实参

      • 位置参数,从左至右,一一对应
      • 关键字参数:关键字不加’‘,必须一一对应
      • 混合参数:既有位置参数,又有关键字参数,位置参数一定要在前面,必须一一对应
    • *的魔性用法

      • 函数的定义:*聚合
      • 函数的调用:*打散
      #*
      # a,b=(1,2)  拆包的概念
      a,b,*c=(1,2,3,4,5,6,7,8)
      print(a,b,c)#1 2 [3, 4, 5, 6, 7, 8]
      
      a,*b,c=(1,2,3,4,5,6,7,8)
      print(a,b,c)  #1 [2, 3, 4, 5, 6, 7] 8
      
  • 空间角度

    • 空间
      • 全局作用域
        • 内置名称空间
        • 全局名称空间
      • 局部作用域
        • 局部名称空间
    • 取值顺序和加载顺序
      • 加载顺序:内置----》全局----》局部
      • 取值顺序:就近原则,LEGB原则
  • 函数的嵌套:遇到函数名()执行该函数

  • global

    • 局部名称空间声明一个全局变量
    • 在局部修改全局变量
    def func():
        global name
        name='alex'
    func()
    print(name)
    
  • nonlocal

    • 不能操作全局变量
    • 内层函数对外层函数的变量进行修改,用nonlocal
    def func1():
        name='太白'
        def inner():
            nonlocal name
            name='alex'
        print(name)
        inner()
        print(name)
    func1()
    # 太白
    # alex
    
  • 函数名的应用

    • 函数名就是变量
    • 函数名对应的是函数的内存地址
    • 函数名可以作为容器类型的元素
    • 函数名可以作为函数的参数传递
    • 函数名可以作为函数的返回值
  • 函数的三大器

    • 迭代
      • 迭代器
        • 字面意思:重复更新迭代的工具
        • 专业角度:内部含有__iner__方法,并且含有__next__方法
        • 优点:
          • 节省内存
          • 惰性机制
          • 不走回头路
        • 缺点:
          • 操作方法较少
          • 不直观
          • 以时间换空间,查询速度较慢
      • 可迭代对象
        • 字面意思:重复的更新的迭代数据
        • 专业角度:内部含有__iner__方法。
        • 可迭代对象:dict.list,tuple,str,set,range
        • 优点:
          • 直观
          • 操作方便
        • 缺点:
          • 占用内存
  • 生成器

    • 本质就是迭代器
    • 唯一的不同是生成器是自己用python代码构建的
    • 生成器的三种产生方式
      • 生成器函数,函数中含有yield的
      • 生成器表达式,
        • 循环模式:变量(加工后的变量) for 变量 in iterable
        • 筛选模式:变量(加工后的变量) for 变量 in iterable if 条件表达式
      • python提供的
    • 列表推导式
      • 循环模式:变量(加工后的变量) for 变量 in iterable
      • 筛选模式:变量(加工后的变量) for 变量 in iterable if 条件表达式
  • 装饰器

    • 本质就是闭包,在不改变原函数的代码以及调用方式的前提下,给其增加新的额外的功能
    • 满足开放封闭原则
    • 装饰器的基本结构
    def warpper(f):
    	def inner(*args,**kwargs):
            ret=f(*args,**kwargs)
            return ret
        return inner
    
    • 应用:登录认证,打印日志等等
  • 闭包

    • 闭包的定义
      • 存在嵌套函数中
      • 内层函数对外层函数非全局变量的引用
    • 好处:
      • 对于引用的这个自由变量,不会在内存中消失,保证数据安全
def wrapper(a):
    name='太白'
    def inner():
        print(a)
        print(name)
    return inner
ret=wrapper('烧饼')  #inner
ret()#太白
print(ret.__code__.co_freevars)  #获取自由变量的变量 
#('a', 'name')
  • 内置函数
posted @ 2020-04-24 18:12  YuSong_HIT  阅读(126)  评论(0)    收藏  举报