enum枚举是一个类。
from enum import Enum
class vip(Enum):
GREEN=1
print(vip.GREEN.value)通过.value访问GREEN标签对应值
.name获取标签名
枚举类型,枚举名字,枚举值是三个概念
for v in vip:
print(v)
遍历枚举类型
result== vip.GREEN==2将得到false,因为枚举本身与枚举数值不同
枚举类型不支持大小比较,支持等值比较 ==
枚举两个值相同,则第二个枚举是第一个的别名(两个数值相同实际上代表一种枚举类型)
for v in vip.__members __: print(v)
遍历枚举成员
枚举类型转换:类名(变量) 自动返回变量值所对应的枚举类型
from enum import IntEnum (限制枚举类型为整型)
from enum import unique(引入unique装饰器,不允许枚举数值相同)
函数式编程:
python中一切皆对象,函数只是一段可执行的代码
def curve_pre():
a=25
def curve(x):
return a*x
return curve
f=curve_pre()
(函数作为另一个函数的返回值)
闭包=函数+环境变量
print(f.__closure __)查看闭包
def f1():
a=10
def f2():
a=20
print(a)
print(a)
f2()
print(a)
a=20是一个局部变量
origin=0
def go(step):
#global origin
new_pos=origin+step
#origin=new_pos
return origin
origin在函数内无法找到,会自动到全局变量中寻找,即找到origin=0;但在函数内定义局部变量origin的值后,python不会再去寻找全局变量origin的值;使用global关键字,可以从函数内部修改全局变量。
orgin=0
def fac(pos):
def go(step):
nonlocal pos #nonlocal强制声明pos不是一个本地局部变量
new_pos=pos+step
pos=new_pos
return new_pos
return go
tour=fac(origin)
print(tour(2)) #2即为step的值
print(tour(3)) #3即step的值
闭包记住了上一次运行的状态,且不改变全局变量的值
匿名函数 lambda表达式
lambda para_list: expression;如f=lambda x,y:x+y print(f(1,2))
冒号后只能是表达式,不能在lambda表达式后用赋值操作
三元表达式
x>y?x:y x若大于y则取x值否则取y值
即 r=x if x>y else y
map类,接收两个参数(func函数,list序列),返回map对象
list_x=[1,2,3,4,5,6]
def square(x):
return x*x
r=map(square,list_x)
返回值r为list_x中所有值的平方
map对传入序列中的每一项执行函数