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))

  • 相关阅读:
    电信的星空极速客户端软件强制安装策略升级了
    CSS 控件适配器工具包对事件处理的 Bug 以及修正办法
    IronPython 源码剖析系列(1):IronPython 编译器
    对 CSS 控件适配器处理事件的 Bug 进一步修正
    明天去长春出差。。。
    Windows 系统右键菜单假死问题解决一例
    使用 Anthem.NET 的常见回调(Callback)处理方式小结
    TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类
    ASP.NET Web开发框架之六 数据库文档方法,工具和实践
    推荐功能强大的ORM Profiler,ORM问题追踪的利器
  • 原文地址:https://www.cnblogs.com/tngh/p/9318688.html
Copyright © 2011-2022 走看看