1、枚举Enum
class fruit1():
apple = 1
print(fruit1.apple)
from enum import Enum
#所有的枚举都是Enum的子类
class FRUIT(Enum):
APPLE = 1
APPLE1 = 1
ORAGNE = 2
BANANA = 3
print(FRUIT.APPLE)
#FRUIT.APPLE=2 #失败
fruit1.apple=2 #成功
for x in FRUIT:
print(x)
【注】 1、打印输出为标签 2、不可以改变值 3、标签不会重复
print("------")
print(FRUIT.APPLE,type(FRUIT.APPLE)) #FRUIT.APPLE <enum 'FRUIT'>
print(FRUIT['APPLE'],type(FRUIT['APPLE'])) #FRUIT.APPLE <enum 'FRUIT'>
print(FRUIT.APPLE.name,type(FRUIT.APPLE.name)) #APPLE <class 'str'>
print((FRUIT.APPLE is FRUIT.APPLE)) #True
print("------")
for x in FRUIT:
print(x)
'''
标签值不会重复
FRUIT.APPLE
FRUIT.ORAGNE
FRUIT.BANANA
'''
print("------")
for x in FRUIT.__members__:
print(x)
'''
所有标签
APPLE
APPLE1
ORAGNE
BANANA
'''
print("------")
for x in FRUIT.__members__.items():
print(x)
2、匿名函数 lambda
def add(x,y):
return x+y
print(add(1, 2))
'''
lambda parameter_list【参数列表】 : expression【表达式】
不能在lambda里添加代码块 如 a=x+y
'''
f = lambda x,y: x+y
print(f(1,2))
可以使用三元表达式
'''
三元表达式 bool?A:B
a>b ? A:B
'''
3、过滤函数 Filter
list_x=[1,0,1,0,1,1,0]
r = filter(lambda x:True if x==1 else False,list_x)
print(list(r))
'''
list_x=[1,0,1,0,1,1,0]
r = filter(lambda x:True if x==1 else False,list_x)
print(list(r))
'''
filter 通过lambda返回的真假过滤
'''
#保留所有小写
print('a'<'b')
list_y=['a','b','C','D','e','F']
r = filter(lambda x:True if 'a'<=x and x <='z' else False,list_y)
print(list(r))
4、映射map
list_x = [1,2,3,4,5]
def square(x):
return x*x
r = map(square,list_x)
print(r,list(r))
r = map(lambda x:x*x,list_x)
print(r,list(r))
list_x = [1,2,3,4,5]
list_y = [1,2,3,4,5,6,7]
r = map(lambda x,y:x+y,list_x,list_y)
print(list(r))
r = map(lambda x,y:x+y,list_y,list_x)
print(list(r))
#以最短的那个为标准,一一计算
5、reduce
from functools import reduce
'''
在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,
它现在被放置在 fucntools 模块里,如果想要使用它,
则需要通过引入 functools 模块来调用 reduce() 函数
连续计算,连续调用lambda
'''
list_x = [1,2,3,4,5]
r = reduce(lambda x,y:x+y, list_x)
print(r)#序列求和
#'A'是给予的初始参数
list_y=['a','b','c','c']
r = reduce(lambda x,y:x+y,list_y,'A')
print(r)
6、装饰器
def fun_per(f):
def fun(fun_name):
print('fun_per')
f(fun_name)
return fun
def f1(fun_name):
print('fun_name' + fun_name)
f1('f1')
@fun_per
def f2(fun_name):
print('fun_name' + fun_name)
f2('f2')
# *fun_name 可以有多个同类型参数 **kw 可以有多个不同参数类型的参数
def fun_per_2(f):
def fun(*fun_name,**kw):
print('fun_per')
f(*fun_name)
return fun
def f2_1(fun_name):
print('fun_name' + fun_name)
f2_1('f1')
@fun_per_2
def f2_2(fun_name1,fun_name2):
print('fun_name--' + fun_name1+"--"+fun_name2)
f2_2('f2','f2')
@fun_per_2
def f2_3(fun_name,a,b):
print('f3_2--'+fun_name+'--'+str(a)+"--"+str(b))
f2_3('fun_name', 10, True)