zoukankan      html  css  js  c++  java
  • Pyhton入门 笔记 第四天 Python的高级语法与用法

    一,枚举

    from enum import Enum     #引入枚举模块

    class VIP(Enum):      #python中枚举既是类,而且要继承父类Enum

        YELLOW=1

        GREEN=2

        BLACK=3

        RED=4

    print(VIP.YELLOW)     #得到的是枚举

    print(VIP.YELLOW.value)

    print(VIP.YELLOW.name)   #得到的是str

    结果:VIP.YELLOW #枚举类型    1 #枚举值    YELLOW#枚举的名字

    二,枚举的重命名

    from enum import Enum     

    class VIP(Enum):      

        YELLOW=1

        YELLOW_ALIAS=2   #在枚举中,如果两个数值是相同的话,可以称为另一个的别名。

        BLACK=3

        RED=4

    for v in VIP:

        print(v)        #此时当打印的时候,是不会打印出别名来的。

    如果想要打印出别名的话

    for v in VIP.__member__.items():

        print(v)     #此时可打印出枚举的所有相关项

    如果上面的输出太多,也可以

    for v in VIP.__member__:

        print(v)

    三,枚举类型转化

    from enum import Enum     

    class VIP(Enum):      

        YELLOW=1

        GREEN=2   

        BLACK=3

        RED=4

    a=1                  #当我们得到一个值时怎么能得枚举类型。

    print(VIP(a))      #直接把值放到枚举类中

    结果为:VIP.YELLOW

    四 枚举的继承

    当在引入时不至有

    from enum import Enum     

    还可以引入

    from enum import IntEnum     #当枚举类继承此(IntEnum)时,枚举类的值只能是数字类型

    class VIP(IntEnum):      

        YELLOW=1

        GREEN=2   

        BLACK=3

        RED=4     

    注,当值有字符类型时会报错,但如果继承(Enum)时,则都可以.

     五,限定枚举值不能相同

    from enum import IntEnum,unique

    @unique  #装饰器    #限定枚举值不可以相同,会报错

    class VIP(IntEnum):      

        YELLOW=1

        GREEN=2   

        BLACK=3

        RED=4    

    六  #闭包=函数+环境变量

    def curve_pre():

        a=25    #环境变量

        def curve(x)

            return a*x*x

        return curve        #函数curve_pre的返回值,为curve函数而不是curve函数的值

    a=10

    f=curve_pre()    #调用函数cruve()之前应先调用函数curve_pre(),因为函数curve_pre的返回值为函数curve(),所以此时f=curve(x)

    f(2)   #此时等于curve(2)  但此时函数curve()中的a=25,而不是10

    print(f(2))

    print(f.__closure__)    #环境变量被放置的地方

    print(f.__closure__[0.]cell_contents)  #打印出环境变量的值

      

    七,问题解决   需求,走路,计算步数

     origin=0    #初始化原点

    def go(step)    #step步数

        global origin    #定义origin为全局变量

        new_pos=origin+step

        origin=new_pos   #此处如果对origin重新赋值时没有定义为全局变量,则会被认为是局部变量,而局部变量不是向上找origin=0,所以会被认为没有被定义

        return new_pos

    print(go(2))

    print(go(6))

    print(go(10))

    八,闭包解决问题同上

    origin=0

    def factory(pos)  #步数

        def go(step)  #行走步数

            nonlocal pos   #指定pos为非局部变量

            new_pos=pos+step

            pos=new_pos

            return new_pos

        return go                            #闭包特征返回函数go()    环境变量(记录上次的环境特殊)pos

    tourist=factory(origin)

    print(tourist(2))

    print(tourist(5))

    print(tourist(8))

  • 相关阅读:
    Navicat for MySQL下载、安装与破解
    javaweb之Cookie学习
    static特别用法【静态导包】——Java包的静态导入
    面试感悟----一名3年工作经验的程序员应该具备的技能
    致孩子
    java中的代码块是什么意思,怎么用
    ModelAttribute用法之一
    SpringMVC获取页面数据乱码的解决get/post
    总结过去10年的程序员生涯 (经验)---大神的建议
    hdu 5237 二进制
  • 原文地址:https://www.cnblogs.com/tngh/p/9318688.html
Copyright © 2011-2022 走看看