欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Pyhton入门 笔记 第四天 Python的高级语法与用法

程序员文章站 2022-04-16 08:21:40
一,枚举 from enum import Enum #引入枚举模块 class VIP(Enum): #python中枚举既是类,而且要继承父类Enum YELLOW=1 GREEN=2 BLACK=3 RED=4 print(VIP.YELLOW) #得到的是枚举 print(VIP.YELLO ......

一,枚举

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