python的高级语法与用法

370 阅读3分钟
  1. 枚举--其实就是一个类,继承自Enum父类,枚举中的标识最好全部用大写,枚举的意义在标签标识而不是数据。

    from enum import Enum
    class VIP(enum):
         YELLOW = 1
         GREEN = 2
         BLACK = 3
         RED = 4
    print(VIP.YELLOW)-----VIP.YELLOW

  2. 枚举与普通类的区别:用字典或者普通类,容易修改里面的数值没有放置相同标签功能,枚举不能更改数值,而且枚举不能使用相同标签。
  3. 枚举的操作:获取枚举的具体值只需要.value,获取枚举标签名字.name,枚举是可以遍历的,直接用for v in VIP
  4. 枚举的比较运算:可以做等值比较,但是不可以做大小比较

    from enum import Enum
    class VIP(enum):
        yellow = 1
        green = 2
    result = VIP.yellow=== VIP.red
    print(result) ---- false 

  5. 枚举的注意事项:


  6.  枚举转换:枚举类型建议用那个数字存储在数据库中,占据更少的存储空间,但是不建议使用数字来代替枚举的类型,影响代码的可读性,使用枚举类名(数值)进行类型转换。

    from enum import Enum
    class VIP(Enum):
       YELLOW= 1
    print(VIP(1)) -----VIP.YELLOW 
  7. 枚举小结:Enum:不限制枚举类数值的数据类型,intEnum:限制枚举类数值必须为整形,枚举类型是单例模式(23种设计模式的一种),不能够实例化,要加上装饰器

    from enum import intEnum,unique
    @unique
    class VIP(intEnum):
      yellow = 1
      black = 2
      bol = 2
    ------报错 值是唯一的

  8. 一切皆对象:在python中一切都是对象,都是类。可以用type函数检验,返回class,并且函数可以作为函数的参数,也可以作为返回值。
  9. 闭包:python在函数内部还可以定义函数,但是该函数作用于只在外部函数内部有效,除非作为外部函数的返回值返回,在外部函数的外部用一个变量接收后就可以使用。python中的闭包的定义,由函数及在定义时外部的环境变量(不能是全局变量),闭包=函数+环境变量(函数定义的时候)可以通过内置变量来__closure__来访问函数的环境变量,保存了一个环境

    def curve_pre():
      age = 25
      def curve(x):
         return 25*x*x
       return curve
    f = curve_pre
    r = f(2)
    print(r)

  10. 闭包的经典误区:这时候第一层的a是环境变量,但是第二层的a就是局部变量,但是返回的函数就是没有引用到环境变量,用的局部变量,所以就形成不了闭包

    def curve_pre():
      age = 25
      def curve(x):
         age = 20
         return age*x*x
       return curve
    f = curve_pre
    r = f(2)
    print(r)

  11. nonlocal和global:nonlocal:定义在闭包里面,声明了该变量不只是嵌套在函数里面才有效果,而是在整个大函数里面都有效果,但是范围仅限于最外层的函数,并不时整个模块,global:是整个环境下的变量起作用,文不是对函数类的变量起作用。

    origin = 0
    def factory(pos):
        def go(step):
           nonlocal pos
           new_pos = pos + step
           pos = new_pos
           return new_pos
         return go
    
    toruist = factory(origin)
    print(tourist(2)) --2
    print(tourist(4)) --4
    print(tourist(5)) --12

  12. factory---工厂模式,javascript vs python 闭包对比,python通过必闭包方式间接调用函数内部的环境变量,环境变量是常驻内存,极容易造成内存泄漏,在使用环境半两一定要注意,javascript内的环境变量会影响浏览器卡顿,影响用户体验,函数编程,不会操纵全局变量,闭包只是函数编程的一种应用,闭包不等于函数式编程。